Java的4大接口
1、Collection:顶级集合接口,其下有List和Set两大接口。
2、List:存储有序的、不唯一的数据。
3、Set:存储无序的、唯一的数据。
4、Map:以键值对的形式存储数据,以键取值。键不能重复,但值可以重复。
List接口
是一个有序集合,继承自Collection接口。现已知常用实现类有:ArrayList、LinkedList、Vector。
1、ArrayList实现了一个长度可变的数组,在内存空间中开辟一串连续的空间。
2、LinkedList使用链表结构存储数据,在插入和删除元素是速度非常快。
3、Vector实现了一个动态数组,它是同步访问的。
如何遍历List
1、for循环。
2、foreach遍历。
for(type element: array) {
System.out.println(element);
}
3、使用迭代器遍历列表。
Set接口
是一个无序集合,继承自Collection接口。现已知常用实现类有:HashSet、LinkedHashSet、TreeSet。
1、HashSet:底层是HashMap的相关方法,传入数据后,根据数据的hashCode进行散列运算,得到一个散列值后再进行运算,确定元素在序列中存储的位置。所以,使用HashSet存数据必须在实体类中重写hashCode和equals方法!!
2、LinkedHashSet:在HashSet的基础上,新增了一个链表。用链表来记录HashSet种元素放入的顺序;HashSet依然是无序的,但链表会按照存入的顺序存储。
3、TreeSet:将存入的数据,进行排序,然后输出。如果传入的是一个实体对象,那么需要传入比较器:实体类实现Comparable接口,并重写CompareTo方法。
Map接口
它以键值对的形式存储数据,键不能重复,值可以重复。常用实现类有:HashMap、HashTable、LinkedHashMap、TreeMap。
1、LinkedHashMap:可以使用列表,记录数据放入的次序,输出的顺序与放入的顺序一致。
2、TreeMap:根据键的顺序,进行排序后输出。如果传入的是实体对象,必须重写比较函数。
HashMap和HashTable的区别
1、HashTable是线程安全的,HashMap是线程不安全的。
2、HashTable的键不能为null,HashMap的键可以为null。
3、HashTable继承自Dirctionary抽象类,HashMap继承自AbstractMap类。
4、扩容大小:HashTable两倍加一,HashMap两倍。
5、初始容量:HashTable为11,HashMap为16。