1.Iterator:迭代器,它是Java集合的顶层接口(不包括 map 系列的集合,Map接口 是 map 系列集合的顶层接口)
- Object next():返回迭代器刚越过的元素的引用,返回值是 Object,需要强制转换成自己需要的类型
- boolean hasNext():判断容器内是否还有可供访问的元素
- void remove():删除迭代器刚越过的元素
Collection 接口继承的是类 Iterable
Iterator和Iterable比较:
Iterable :存在于 java.lang 包中,封装了 Iterator 接口
Iterator :存在于 java.util 包中。核心的方法next(),hasnext(),remove()。
迭代器使用:
//产生一个 List 集合,典型实现为 ArrayList。 List list = new ArrayList(); //添加三个元素 list.add("Tom"); list.add("Bob"); list.add("Marry"); //构造 List 的迭代器 Iterator it = list.iterator(); //通过迭代器遍历元素 while(it.hasNext()){ Object obj = it.next(); System.out.println(obj); }
2.Collection:List 接口和 Set 接口的父接口
3.List :有序,可以重复的集合。
List 接口的三个典型实现:
- List list1 = new ArrayList(); 底层数据结构是数组,查询快,增删慢;线程不安全,效率高
- List list2 = new Vector(); 底层数据结构是数组,查询快,增删慢;线程安全,效率低,几乎已经淘汰了这个集合
- List list3 = new LinkedList();底层数据结构是链表,查询慢,增删快;线程不安全,效率高
4.Set:典型实现 HashSet()是一个无序,不可重复的集合
- Set hashSet = new HashSet(); 无序;不可重复;不是线程安全的;集合元素可以为 NULL; 其底层其实是一个数组, HashSet 集合底层数组的索引和值有一个确定的关系:index=hash(value),那么只需要调用这个公式,就能快速的找到元素或者索引。
- Set linkedHashSet = new LinkedHashSet(); 不可重复,有序,因为底层采用 链表 和 哈希表的算法。链表保证元素的添加顺序,哈希表保证元素的唯一性
- Set treeSet = new TreeSet(); 不可重复,底层使用 红黑树算法,擅长于范围查询
* 如果使用 TreeSet() 无参数的构造器创建一个 TreeSet 对象, 则要求放入其中的元素的类必须实现 Comparable 接口所以, 在其中不能放入 null 元素* 必须放入同样类的对象.(默认会进行排序) 否则可能会发生类型转换异常.我们可以使用泛型来进行限制
举例:
Set treeSet = new TreeSet(); treeSet.add(1); //添加一个 Integer 类型的数据 treeSet.add("a"); //添加一个 String 类型的数据 System.out.println(treeSet); //会报类型转换异常的错误
以上三个 Set 接口的实现类比较:
5.Map:key-value 的键值对,key 不允许重复,value 可以
- 严格来说 Map 并不是一个集合,而是两个集合之间 的映射关系。
- 这两个集合每一条数据通过映射关系,我们可以看成是一条数据。即 Entry(key,value)。Map 可以看成是由多个 Entry 组成。
- 因为 Map 集合即没有实现于 Collection 接口,也没有实现 Iterable 接口,所以不能对 Map 集合进行 for-each 遍历。
Map map=HashMap(); 线程不安全,效率高。 允许null键和null值,是基于哈希表的Map接口实现。 哈希表的作用是用来保证键的唯一性的
Map map=LinkedHashMap():是基于Map接口的哈希表和链接列表实现, 由哈希表保证键的唯一性 由链表保证键盘的有序(存储和取出的顺序一致)
Map map=Hashtable():线程安全,效率低。不允许null键和null值
Map map=treeMap(); 是基于红黑树的Map接口的实现。
Map 和 Set 集合的关系
1、都有几个类型的集合。HashMap 和 HashSet ,都采 哈希表算法;TreeMap 和 TreeSet 都采用 红-黑树算法;LinkedHashMap 和 LinkedHashSet 都采用 哈希表算法和红-黑树算法。
2、分析 Set 的底层源码,我们可以看到,Set 集合 就是 由 Map 集合的 Key 组成。