Collections是其他集合类的根接口
Set、List、Queue是子接口,同样不能实例化
子接口下面的实体类(如ArrayList)才可以实例化。
Collections中没有get()方法,Lisi和ArrayList中才有,因为get()方法不是所有集合类的共性
HashSet集合存入一个元素时,会调用该对象的hashCode()方法得到该对象的hashCode值,根据hashCode值决定存放位置
Iterator接口 定义了4个方法:hasNext() next() remove() forEachRemaining() 用于遍历Collections中的元素
Set接口 线程不安全 多线程操作同一集合时需要同步
- HashSet:无序集合 以hashcode值计算存储位置存储 <- LinkedHashSet:链表无序集合,按添加顺序排列元素
- SortedSet接口:有排列的集合 <- TreeSet:红黑树数据结构 默认按元素大小排列,可改成自然排序/定制排序
- EnumSet:枚举集合
List接口(增加了与索引有关的方法)
有一个initialCapacity参数 默认为10 增加元素超过该数组长度时会自动增加
- ArrayList 新 常用 线程不安全 性能高
- Vector 古老 少用 线程安全 所以性能低 <- Stack子类 模拟栈的数据结构 有peak pop push等方法
- LinkedList:既实现了List接口 也实现了Deque接口 可当作List集合也可当双边队列来使用
Queue接口 (模拟队列:先进先出)
- PriorityQueue 非绝对标准的队列 以与元素大小排序 而非以进入队列顺序排序 可改成自然排序/定制排序
- Deque接口:代表双端队列 头尾都可插入元素 可当成栈来用(只操作尾部)
- Deque接口:<- ArrayDeque实现类 与ArrayList一样基于数组
ArrayList与ArrayDeque的实现机制相似,底层采用一个动态的,可重分配的Object[]数组来存储集合元素,当超容量时,系统在底层重新分配一个Object[]数组来存储集合元素
Vector也是以数组形式存储,但实现了线程同步,所以性能较低
LinkList与LinkedHashSet的实现机制,内部以链表的形式保存集合元素,随机访问时效率低,但插入,删除时性能高
List集合使用tips:
- 对于数组型,遍历时采用随机访方法get() ; 对于链表型,遍历时采用迭代器(Iterator)
- 需要经常插入、删除则用链表型
- 若多个线程同时操作,可使用Collections将集合包装成线程安全的集合(后面讲)
网友评论