JAVA基础面试题------②

一、JAVA异常分类

1.1  Error

指java运行时系统内出现错误和资源耗尽错误。是程序无法处理的错误

资源耗尽错误指的是  超过idea设置编译器内存默认范围时会报这个错。

1.2  Exception

是程序本身可以处理得异常

①RuntimeException   (运行时异常)

一定是程序员的错误,代表程序员的代码存在bug

解决办法:修改bug

②CheckedException(检查异常:编译时出现异常)

解决办法:这个要用try-catch捕获异常或者throws抛出异常

二、List

1.1  ArrayList

内部是通过动态数组实现,它允许对元素进行快速随机访问

扩容机制:当不够内存时,就会创建一个length为当前的1.5倍的数组,然后进行复制,移动,成为一个新的数组。

优点:利于查询和遍历,

缺点:不利于删除插入,因为进行增删操作需要对已知数组元素进行移动,操作繁杂。

/**
 * 扩容机制:当不够内存时,就会扩大为当前数组长度的1.5倍
 * ArrayList是有序的,ArrayList使用线性顺序存储结构,和数组一致,
 * 每个对象有一个index,index本身是有序的,所以你添加的时候,
 * index有序增长,遍历的时候,按照index遍历,也是有序的。
 */
public class ArrayListTest {
    public static void main(String[] args) {

        ArrayList<String> list = new ArrayList<>();
        list.add("1"); //坐标为0
        list.add("5");
        list.add("3");
        System.out.println(list);//[1,5,3]

        //插入坐标为2的元素2
        list.add(2,"2");
        System.out.println("插入坐标数组链表为:"+list);//1 5 2 3

        int size = list.size();
        System.out.println("数组链表长度为:"+size);//4

        String s = list.get(0);
        System.out.println("坐标为0的元素是"+s);//1

        boolean contains = list.contains("5");
        System.out.println("元素5是否在数组链表中?"+contains);//true

        boolean empty = list.isEmpty();
        System.out.println("该数组链表是否为空?"+empty);//false

        //遍历数组元素及坐标
        //①for循环
        for (int i =0;i<list.size();i++){
            //坐标为0的元素是1  坐标为1的元素是5 坐标为2的元素是2 坐标为3的元素是3
            System.out.println("坐标为"+i+"的元素是"+list.get(i));
        }

        //②foreach循环:顺序遍历所有元素
        for (String s1: list){
            //没有坐标显示的,但是是顺序遍历出来数组
            //坐标为0的元素是1
            //坐标为1的元素是5
            //坐标为2的元素是2
            //坐标为3的元素是3
            System.out.println("遍历数组为:"+ s1);
        }

        //③使用迭代器

        list.remove("1");//删除元素1  //5 2 3
        list.remove(2);//删除坐标为2的元素  // 1 2

        list.indexOf("5");
        System.out.println("删除后数组为:" + list); // 1 2


    }

}

1.2  Vector 

是通过数组实现的,不过它支持线程的同步访问,即同一时间内,只能做一件事情。

优点:避免多线程同时进行带来的不一致性

缺点:但实现同步需要花费时间很多,而且只能做完一个事件才能进行下一个,访问速度慢

1.3  LinkList

双向链表,链表的每个元素都是具有两个节点的,每当移动或者删除时,就会同时变更

优点:适合增删

缺点:查询遍历慢,因为需要一个一个的往下查找遍历,所以时间复杂度为O(n)。

public class LinkedListTest {
    public static void main(String[] args) {
        LinkedList<String> linkedList = new LinkedList<>();

        linkedList.add("2");//坐标为0
        linkedList.add("6");
        linkedList.add("4");
        linkedList.add("8");
        System.out.println("增加元素后链表为" + linkedList);//2 6 4 8 
        linkedList.add(2,"3");
        System.out.println("插入坐标为2的元素3时,链表为" + linkedList); // 2 6 3 4 8

        String index3 = linkedList.get(3);
        System.out.println("坐标为3的元素为:" + index3); //4

        boolean contains = linkedList.contains("4");
        System.out.println("元素4是否在链表中?" + contains);//true

        boolean linkedListEmpty = linkedList.isEmpty();
        System.out.println("链表是否为空?" +linkedListEmpty); //false

        //遍历第一种方法
        for(int i=0 ; i<linkedList.size();i++){
            //坐标为0的元素为2
            //坐标为1的元素为6
            //坐标为2的元素为3
            //坐标为3的元素为4
            //坐标为4的元素为8
            System.out.println("坐标为"+i+"的元素为"+linkedList.get(i));
        }

        //遍历第二种方法,str是每次取一个元素出来
        for(String str: linkedList){
            System.out.println(str);//2 6 3 4 8
        }

        System.out.println("第一个元素" + linkedList.getFirst());//2
        System.out.println("最后一个元素" + linkedList.getLast());//8

        linkedList.remove(1);//删除坐标为1的元素
        linkedList.set(0,"0"); //把坐标为0的元素改为0

        System.out.println(linkedList); //0 3 4 8

    }
}

三、Map

1.HashMap

基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。

存储的内容是键值对,就是key-value,是无序的。适合查询,因为根据hash值能快速定位到数组的具体下标。

2.HashTable

常用功能和Has和Map类似,但它的线程是安全的,所以在某个时间段只有一个线程能写HashTable,所以访问速度会慢很多。

3.TreeMap

是通过红黑树实现的,默认是根据键值的升序排序,是可排序的Map。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值