Collection集合:包括List和Set接口
单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是java.util.List和java.util.Set。其中,List的特点是元素有序、元素可重复,Set的特点是元素无序,而且不可重复。List接口的主要实现类有java.util.ArrayList和java.util.LinkedList,Set接口的主要实现类有java.util.HashSet和java.util.TreeSet。
一、List集合(线性方式进行存储)有序可重复
1、List接口的特点
①是一个元素存取有序的集合
②是一个带索引的集合
③可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素
2、List接口常用方法
①public void add(int index, E element) : 将指定的元素,添加到该集合中的指定位置上。
②public E get(int index) :返回集合中指定位置的元素。
③public E remove(int index) : 移除列表中指定位置的元素, 返回的是被移除的元素。
④ public E set(int index, E element) :用指定元素替换集合中指定位置的元素,返回值的更新
前的元素。
3、List的子类
ArrayList集合(存储的结构是数组结构,增删慢,查找快):
由于开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合
LinkedList集合(存储的结构是链表结构,方便元素添加、删除的集合)双向链表
二、Iterator迭代器
Iterator接口
主要用于迭代访问(即遍历)Collection中的元素
①获取迭代器的方法:
public Iterator iterator():获取集合对应的迭代器,用来遍历集合中的元素
②Iterator接口的常用方法
public E next():返回迭代的下一个元素
public boolean hasNext(): 如果仍有元素可以迭代,则返回true.
Iterator it = list.iterator();
while(it.hasNext()) {
Object obj = it.next();
}
增强for
增强for循环(也称for each循环),专门用来遍历数组和集合。它的内部原理其实是个迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作
格式:
for(元素的数据类型 变量 :Collection集合or数组){
//写操作代码
}
三、Set接口(无序不可重复)
1,HashSet集合
①jav.util.HashSet底层的实现其实是一个java.util.HashMap支持
②HashSet是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能。保证元素唯一性的方式依赖于:hashCode与equals方法
2,HashSet集合存储数据的结构(哈希表)
什么是哈希表
JDK1.8中,哈希表存储采用数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。
简单的来说,哈希表是由数组+链表+红黑树实现的

四、Collections
常用功能
java.utils.Collections是集合工具类,用来对集合进行操作
五、Comparator比较器
简述Comparable和Comparator两个接口的区别
Comparable:强行对实现他的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。想要集合中的元素完成排序,那么必须要实现比较器Comparable接口。
六、HashMap与Hashtable的区别
1.HashMap是非同步的,没有对读写等操作进行锁保护,所以是线程不安全的,在多线程场景下会出现数据不一致的问题。HashTable是同步的,所有的读写操作都进行了锁(synchronized)保护,在多线程环境下没有安全问题。但是所保护会对读写的效率产生较大影响
2.HashMap结构中,是允许保存null的,Entry.key和Entry.valiue均可以为null。但是HashTable是不允许保存null的