java学习笔记——集合框架面试题

一、ArrayList、LinkedList、Vector异同

相同点:

  • .都是List集合的实现类
  • 存储数据的特点相同:有序的、可重复的

不同点:

  • ArrayList和Vector底层是数组,LinkedList底层是使用双向链条的形式进行存储的
  • ArrayList查询速度比较快,LinkedList增删速度高

二、遍历List集合的几种方式

  1. 迭代器
List list = new ArrayList();
        list.add("aaa");
        list.add("bbb");
        list.add(123);
        list.add("bbb");
        // 1 迭代器
        Iterator i = list.iterator();
        while(i.hasNext()){
            System.out.println(i.next());
        }
  1. 增强for循环
for(Object o : list){
            System.out.println(o);
        }

  1. for循环
for (int j = 0; j < list.size(); j++) {
            System.out.println(list.get(j));
        }
  1. 转成数组,不建议这样做
Object[] objects = list.toArray();
        for(Object o : objects){
            System.out.println(o);
        }

三、list和set集合的区别

  • 相同点:都是Collection的子接口
  • 不同点:List是有序的可重复,有自己定义的方法;Set是无序的不可重复的,没有自己定义的方法

四、HashMap的底层实现原理(面试重点,多家公司都有此面试题)

  1. Map map = new HashMap();先创建HashMap对象,调用构造方法,对加载因子进行了初始化
  2. map.put(123,123):首次调用put方法的时候,创建了一个长度为16的Node[]数组,并且对临界值(当数组中存放的元素为多少时,开始扩充数组)进行了初始化为12
  3. 添加一个元素put(key1,value1),调用key1所在类的HashCode方法,计算key1的哈希值,对哈希值通过一些算法进行计算,得key1元素的位置,拿着这个位置去Node[]数组里面找位置,①如果此位置数据为空,key1,value1添加成功;②如果此位置上的元素不为空,且key1的哈希值和已经存在的一个数据(key2-value2)哈希值不相同,直接添加成功;③如果key1的哈希值和已经存在的一个数据(key2-value2)哈希值相同,调用key1的equals方法和key2进行比较,①如果equals比较的结果返回false,此key1-value1添加成功(以链条的形式存在);②如果equals比较的结果返回true,使用value1替换value2

五、HashMap和Hashtable的区别

  • Map的主要实现类,线程不安全,效率高,可以存储值为null的key和value
  • 古老的实现类,线程安全,效率低,不可以存储值为null的key和value

六、Collection和Collections的区别

  • Collection是Set和List的一个父接口
  • Collections是一个操作Set、List和Map等集合的工具类

七、处理异常的方式

抓抛模型

  1. 抛:当执行程序的时候,一旦出现异常,就会生成一个对应的异常对象,并将异常抛出
    (1)抛的类型:自动抛和手动抛
           手动抛:throw + 异常类的对象,这个异常类可以是现成的异常类,也可以是自己定义的异常类
    (2)此异常对象处理交给方法的调用者, 一旦出现异常,就会生成一个对应的异常对象,并将对象抛出,将来交给方法的调用者
  2. 抓:抓住程序中抛出的异常对象
    两种处理方式:try-catch、throws+异常类型
    (1)在java程序运行时收到异常对象,会寻找能够处理这种异常的异常代码,并将当前的异常对象交给其来处理
    (2)怎么抓异常对象?抓的过程就是异常处理的方式
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值