java面试之集合

集合是用来存储数据的容器。
摘要由CSDN通过智能技术生成

1、 集合语法

1.1 、集合基础知识
集合的定义
     集合是用来存储数据的容器。
集合的特点
     1、用来存储对象。
     2、对象个数可以确定时,使用数组;对象的个数不确定时,使用集合。
集合与数组的区别
     1、数组是固定长度,集合是可变长度。
     2、数组的可以存储,基本类型和引用类型。集合只能存储引用类型。
     3、一个数组的存储数据类型是同一类型。集合的存储数据类型不是同一类型。
常用的集合类有哪些?
Map和Collection是所有集合的父接口。
                                                         架构图
在这里插入图片描述
java的集合分为CollectionMap两大类。
Collection集合主要有set和List接口
1、 List接口:一个有序的容器。元素可以重复,且插入null元素。
    实现类:
         1.1ArrayList(底层数据结构是Array)
         1.2LinkedList(底层数据机构是链表)
2、Set接口:一个无序的容器。元素不能重复,只能插入一个null元素。实现类有:1.1HashSet:无序、唯一,底层数据结构是HashMap。
         2.1TreeSet :有序,唯一。数据结构是排序二叉树。
         2.2LinkedHashSet: LinkedHashSet 继承与 HashSet,并且其内部是通过 LinkedHashMap 来实现的。有点类似于我们之前说的LinkedHashMap 其内部是基于 Hashmap 实现一样,不过还是有一点点区别的。
Map是一个键值对集合,存储键、值和之间的映射。
         Map 的常用实现类:HashMap、TreeMap、HashTable、LinkedHashMap、ConcurrentHashMap。
Java集合的快速失败机制 “fail-fast”?
java集合的错误检测机制,如果多个线程对集合进行结构上操作,就可以产生fail-fast机制。
解决办法:
1、在遍历过程中,所有涉及到改变modCount值得地方全部加上synchronized。
2、使用CopyOnWriteArrayList来替换ArrayList。
1.2 、Collection接口
1.2.1 、List接口
1.2.1.1、迭代器 Iterator 是什么?

iterator是用来遍历colleciton接口。

		ArrayList<Integer> lists = new ArrayList<Integer>();
        lists.add(2);
        lists.add(3);
        lists.add(4);
        lists.add(5);
        lists.add(6);
        Iterator<Integer> iterator = lists.iterator();
        while (iterator.hasNext()) {
   
            System.out.println("--->" + iterator.next());
        }

Iterator 的特点是只能单向遍历,但是更加安全,因为它可以确保,在当前遍历的集合元素被更改的时候,就会抛出 ConcurrentModificationException 异常。

1.2.1.2、如何边遍历边移除 Collection 中的元素?

		Iterator<Integer> iterator = lists.iterator();
        while (iterator.hasNext()){
   
            iterator.remove();
        }

注意:不能使用forEach.

		for (Integer i : lists) {
   
            lists.remove(i);
        }

原因是:使用foreach,实际上生成生成iterator 来遍历该 list。java不允许便利时候,同时修改list。

1.2.1.3、遍历一个 List 有哪些不同的方式?每种方法的实现原理是什么?Java 中 List 遍历的最佳实践是什么?
         1、使用iterator模式,其实是一种设计模式。
         2、for循环,使用计数器。
         3、forEach,本质还是使用iterator方式,这是代码简洁。

最佳实践:Java Collections 框架中提供了一个 RandomAccess 接口,用来标记 List 实现是否支持 Random Access。
         1、如果实现RandomAccess接口,位置读取的时间复杂度是(0),例如,ArrayList,使用for循环。
         2、没有实现RandomAccess接口,例如:List集合、set集合,都是推荐,使用iterator、forEach循环。

1.2.1.4、ArrayList介绍
         1、ArrayList的数据结构是数组。特点就是,查询速度很快,增删性能慢(原因是需要进行复制数据)
         2、ArraysList和Arrays的相互转化:
Arrays----->List: Arrays.asList()

		Integer[] ints = new Integer[]{
   12, 25, 256, 45};
        List<Integer> intsList = Arrays.asList(ints);
        intsList.forEach((t
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值