1.List接口常用的子类:ArraryList LinkedList Vector;
-----有序 可重复 可以有Null 有索引
2.Set接口常用的子类:HashSet LinkedHashSet TreeSet;
-----无序、不可重复 没有索引,只能遍历查找,不允许添加重复的元素
3. 都是Collection的子接口 在其实现类里面都能用Collection的方法,List还有特有的新增方法,Set没有新增的方法,但是可以用list的方法
4.迭代:在Collection 中提供了一种对所有集合遍历的方法 封装在Iterator接口中。
ArrayList :(查询用)
- 频繁访问列表中的某一个元素。
- 只需要在列表末尾进行添加和删除元素操作。
- 查询效率高,增删效率低,线程不安全
- 底层用数组来存储
- 长度可以任意改变,可以保存任意数据类型
LinkedList :(增加删除用)
- 通过循环迭代来访问列表中的某些元素。
- 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
- 特点:查询效率低,增删效率高,线程不安全。
- 底层采用双向链表实现 采用的是链式存储结构,前驱节点和后继节点
Vector :(有线程需求的时候用)
- 底层用数组存储
- 和ArrayList可以互用,不同之处Vector是线程安全的,需要进行 线程同步检查,效率低
- 特有的遍历方法
-
Enumeration el = vector.elements(); //el.hasMoreElements() 查询是否有可输出的元素 返回布尔 while (el.hasMoreElements()) { //nextElement() 取出对应的元素并将指针移动到下一个元素上 System.out.println(el.nextElement()); }
HashSet类
- 底层用Hashmap实现
- 查询和增改效率都挺高
- 元素的存入是无序的
- 保证元素唯一性
LinkedHashSet类
- 底层采用的是链表 和哈希表组合的方法来存储数据的。
- 按照存入的顺序来保存元素
- LinkedHashSet和HashSet的用法一模一样。
TreeSet类
- 底层实际是TreeMap实现的
- 可以自定义元素的保存顺序
- 通过key 来存储HashSet的元素,由于map 中的key 不能重复。所以TreeMap与生俱来有不可重复的能力。
- 普通引用类型会重写Comparable接口内容,所以不需要使用者在去自定义排序规则。