![a675673921977fc9b1d5a962b388b265.png](https://img-blog.csdnimg.cn/img_convert/a675673921977fc9b1d5a962b388b265.png)
java集合是日常工作中使用的基本工具,它可以使程序更简洁、更强大、更有效。首先看看下面的图片,这对集合的理解会很有帮助。(其中黄色框框为接口,绿色框框为抽象类,蓝色框框为具体类。虚线箭头表示实现关系,实现箭头表示继承关系)
![87a9409ab3f32db056ffd3bc228da087.png](https://img-blog.csdnimg.cn/img_convert/87a9409ab3f32db056ffd3bc228da087.png)
Java集合框架简图
![9ef8c516443a8b245e0367597ffb07cc.png](https://img-blog.csdnimg.cn/img_convert/9ef8c516443a8b245e0367597ffb07cc.png)
Map结构简图
可以从图中看到,Java集合实际上只有四个基本的组件:Map(存放键和与之关联的值) ,List(它以特定的顺序保存一组元素,有序可重复,元素有下标) ,Set(其中元素无序不可重复) 和Queue(只能在集合一端插入对象,并从另一端移除对象) ,而他们各有两到三个实现版本。
这里对Java集合的疑难点的做一个小结:
- 数组将数组索引与对象相关联。它保存了类型明确的对象,因此在查找对象时不必对结果做类型转换。它可以是多维的,可以保存基本类型的数据。虽然可以在运行时创建数组,但是一旦创建了数组,就无法更改数组的大小。
- Collection保存单一的元素,而Map包含相关联的键值对。使用Java泛型,可以指定集合中保存的对象的类型,因此不能将错误类型的对象放入集合中,并且在从集合中获取元素时,不必进行类型转换。而且,各种Collection和各种Map都可以在添加更多的元素时,都会自动调整其尺寸大小。虽然集合不能保存基本类型,但自动装箱机制会负责执行基本类型和集合中保存的包装类型之间的双向转换。
- 如同数组一样,List也将数字索引和对象相关联,因此,数组和List都是有序集合。
- 如果要执行大量的随机访问,则使用ArrayList, 如果要经常从表中间插入或删除元素,则应该使用LinkedList,虽然对于随机访问来说相对较慢,但它具有比ArrayList更大的特征集。
- 迭代器(也是一种设计模式)可以用于不同类型的集合,迭代器是一个对象,它在一个序列中移动并选择该序列中的每个对象,而客户端程序员不需要关心该序列的底层结构。它通常被称为轻量级对象:创建它的代价小。有关迭代器的方法有iterator() (要求集合返回一个Iterator)、next() (获得序列中的下一个元素)、hasNext()( 检查序列中是否含有元素)和remove() (将迭代器最近返回的那个元素删除)方法。
- ListIterator是一个更加强大的Iterator子类型,它只能由List类生成。Iterator 只能向前移动,而 ListIterator 可以双向移动。它还可以生成相对于迭代器在列表中指向的当前位置的后一个和前一个元素的索引,并且可以使用 set() 方法替换它访问过的最近一个元素。可以通过调用 listIterator() 方法来生成指向 List 开头处的 ListIterator,还可以通过调用 listIterator(n) 创建一个一开始就指向列表索引号为 n 的元素处的 ListIterator 。
- 队列(先进先出(FIFO)集合)和堆栈(后进先出(LIFO)集合)的行为是通过LinkedList提供的。
- 优先级队列PriorityQueue声明下一个弹出的元素是最需要的元素(具有最高的优先级)。让PriorityQueue 与 Integer , String 和 Character 这样的内置类型一起工作易如反掌。PriorityQueue 是允许重复的,最小的值具有最高的优先级(如果是 String ,空格也可以算作值,并且比字母的优先级高)。
- 映射Map是一种将对象(而非数字)与对象相关联的设计。HashMap专门为快速访问而设计,而TreeMap保持键始终处于排序状态,所以没有HashMap快。LinkedHashMap按照插入顺序保存其元素,但使用散列提供快速访问的能力。
- Set不接受重复元素。HashSet(使用散列函数)提供最快的查询速度,而TreeSet保持元素处于排序状态(TreeSet 将元素存储在红-黑树数据结构中)。LinkedHashSet按照插入顺序保存其元素,但使用散列提供快速访问的能力。
- 不要在新代码中使用遗留类Vector,Hashtable和Stack。
- 除 TreeSet 之外的所有 Set 都具有与 Collection 完全相同的接口。List 和 Collection 存在着明显的不同,尽管 List 所要求的方法都在 Collection 中。另一方面,在 Queue 接口中的方法是独立的,在创建具有 Queue 功能的实现时,不需要使用 Collection 方法。最后, Map 和 Collection 之间唯一的交集是 Map 可以使用 entrySet() 和 values() 方法来产生 Collection 。
好了,java集合的疑难点就总结到这里了,觉得对你有帮助的可以给小编一个赞哦!欢迎大家指正文章的不足呀! 小编会定期分享有关Java的技术栈和学习资源,欢迎点赞关注留言呀!