Java学习笔记-集合
Note:参阅书籍《Core Java,Volume I:Fundamentals》
集合框架-Collection Framework
集合的接口-interface
- 集合有两个基本的接口:Collection 和 Map ;
- Iterator 迭代器接口;
- RandomAccess ,这个接口没有任何方法,但可以检测一个特定的集合是否支持高效的随机访问;
集合框架中的类-class
具体的集合类
ArrayList && LinkedList
- List接口用于描述一个有序集合。
- ArrayList 基于动态数组实现。扩容:计算新的容量大小,为当前容量的1.5倍 (oldCapacity * 3) / 2 + 1;
- LinkedList 基于双链表实现。
- 两者的比较:
- 基于时间: 当主要是查找操作(get)时应使用ArrayList;当主要是插入、删除(insert,remove)操作时应使用LinkedList.
- 基于空间: 当线性表的长度变化比较大时,应使用LinkedList;由于链式存储结构(LinkedList)使用了额外的存储空间来表示数据元素之间的逻辑关系,所以当线性表数据元素结构简单,长度变化不大时可以考虑采用顺序存储结构(ArrayList)。
HashSet 散列集
- HassCode: 散列表为所有的对象计算一个整数,称为散列码。
- 自己定义的hashCode方法应该与equals方法兼容,即a.equals(b)为true,则a与b必须要有相同的散列码。但反之不成立。
- 散列表用链表数组实现,每个列表被称为桶(bucket),要想查找表中对象的位置,就要先计算它的散列码,然后与桶的总数取余,所得到的结果就是这个元素的桶的索引。
- 装填因子(load factor,默认值0.75)决定何时对散列表进行再散列(rehashed).
- HashSet是一个没有重复元素的元素集合。
TreeSet 树集
- 树集是一个有序集合,可以以任意顺序将元素插入到集合中,在对集合遍历时,每个元素将按照排序后的顺序呈现。
- 将一个元素添加到树中要比添加到散列表中慢,但与将元素添加到数组、链表中的正确位置要快的多。
- 可以通过将Comparator对象传递到TreeSet构造器中来使用不同的比较方法。