Java集合体系
1. List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口
Set下有HashSet,LinkedHashSet,TreeSet
List下有ArrayList,Vector,LinkedList
Map下有Hashtable,LinkedHashMap,HashMap,TreeMap
2. Connection接口
1. List 有序 可重复
ArrayList 优点:底层数据结构是数组,查询快,增删慢 缺点:线程不安全,效率高
Vector 优点:底层数据结构是数组,查询快,增删慢 缺点:线程安全,效率低
LinkedList 优点:底层数据结构是链表,查询慢,增删快 缺点:线程不安全,效率高
ArrayList和Vector的区别:
Vector的方法都是同步的,是线程安全的,而ArrayList不是,由于线程的同步必然要影响性能,因此,ArrayLisy的性能比Vector好
当ArrayList和Vector中的元素超过它的初始化大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小。因此ArrayList有利于节约内存空间
2. Set 无序 唯一
HashSet 底层结构是Hash表 如何保证元素的唯一 ? 依赖两个方法:hashCode()和equals()
LinkedSet 底层结构是链表和Hash表 (先进先出 插入有序 唯一) 用链表保证元素有序以及用hash表保证元素唯一
TreeSet 底层结构是红黑树
如何保证元素排序?
自然排序和比较器排序
自然排序:
-
-
自然排序是让元素所属的类实现Comparable接口,重写compareTo()方法
-
重写方法时候,要按照主要条件和次要条件来写 返回值为
比较器排序:
在TreeSet方法中,采用匿名内部类的形式 new comparator 接口
如何保证元素的唯一性?
根据比较返回值是否为0来决定
Set 集合如何保证元素不重复?
1.添加元素时,先计算这个元素的hash值
2.如果hash表尚未初始化,就先初始化hash表
3.根据对象的hash值计算对象的存储位置,如果该位置没有元素,就存储元素
4.如果该位置有元素,就把存入的元素和以前的元素进行比较hash值
5.如果hash值不同,会继续向下运行,将元素添加到集合中
6.如果hash值相同,会调用equals方法进行比较,如果返回false,会继续运行,将元素添加到集合中,如果返回true
说明元素重复,不存储
3.Map接口
三个比较重要的实现类,分别是HashMap、TreeMap和HashTable
TreeMap是有序的,HashMap和HashTable是无序的。
HashTable的方法是同步的,HashMap的方法不是同步的。这是两者最主要的区别。
总结:
HashTable是线程安全的,HashMap不是线程安全的。
HashMap效率较高,HashTable效率较低。
HashTable不允许null值,HashMap允许null值(key和value都允许)
父类不同:HashTable的父类是Dictionary,HashMap的父类是AbstractMap

浙公网安备 33010602011771号