java 集合

本文深入探讨Java集合框架的核心概念,包括Collection与Iterable的关系、泛型的优势、迭代器接口的使用及其实现差异、fail-fast机制的理解及应用策略、HashMap与HashTable的区别、不同场景下HashMap与TreeMap的选择依据、BlockingQueue的作用及其实现原理、Comparable与Comparator接口的设计考量,以及如何通过Collections工具类确保集合的不可变性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先奉上java9的API介绍

collection接口集成自Itreable 接口,故拥有迭代能力. 

1. 为什么要有集合  

        本质上是一些可以复用的函数

2. 泛型好处

       编译器提醒报错,避免了运行时的ClassCastException异常, 不用生成类型检查的字节码,更快

3. 迭代器接口

        用来遍历集合, 并且提供移除元素方法

 4. 为什么迭代器不提供add方法

      迭代器无法保证迭代的顺序,那么这种说法是不清晰的(unclear)。注意的是,ListIterator就提供了add()方法,因为它能保证迭代的顺序。

5. Iterator 和ListItreator的区别

terator可以用来遍历Set和List集合,而ListIterator只能用于遍历List。Iterator只能进行正向(forward direction)遍历而ListIterator可以双向遍历。ListIterator继承于Iterator接口,但却添加了一些额外的功能,如添加、替换元素,获取前后元素的索引

6. 对迭代器的fail-fast如何理解?

    快速报错机制会在获取下一个元素时候修改报错。除了想并发的类,所有集合都是这样的

 7 . fail-fast 和 fail-safe区别 

        Iterator的fail- safe是对集合在进行clone时提供的一种保护机制,因此集合发生了修改不会引起任何问题. fail-safe是针对并发集合类, fail-fast是iterator实现类都有的

 8. 如何避免ConcurrentModificationException?

        使用并发集合类, 例如使用 copyonwriteArrayList 代替ArrayList。

 9. HashMap 和 HashTable区别

       

  • HashMap的键值均可为null,而Hashtable不允许键或值为null。
  • Hashtable是synchronized的 而HashMap 则不是同步的。
  • Java 1.4中引入LinkedHashMap作为HashMap的子类,因此可以进行有序的迭代,并且可以很轻松的从 HashMap 过渡到 LinkedHashMap,然而 Hashtable的迭代顺序是无法预测的。


10. 何时用hashmap , treemap 

        对 于插入、删除、定位元素频繁的操作,HashMap提供了最好的效率。如果想要按key的排序来遍历,那么TreeMap是不二选择。先向HashMap中添加元素,然后转换为TreeMap再按key的排序进行遍历也许会带来效率上的提高。

11. 什么是BlockingQueue

       是Queue接口的子接口.支持获取元素时等待队列变为非空,以及存储元素时等待空间变得可用. 主要用来解决生成者,消费这问题。

12. 怎样理解Comparable, 和 Comparator接口

      Comparable 放在类上实现 ,更自然。  comparator接口更灵活

13 . 如何确保集合传入一个方法不被修改

        调用Collections.unmodifiableCollection(Collection c)方法来创建一个只读的集合,然后再将它传入函数中,这样就会确保任何企图修改集合的操作都会引起 UnsupportedOperationException异常


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值