集合框架的优势:
传统的容器(数组)在进行增、删等破坏性操作时,需要移动元素,可能导致性能问题;同时添加、删除等算法和具体业务耦合在一起,增加了程序开发的复杂度。并且提供一套性能优良,使用方便的接口和类。
Collection:他的下级是这两个List和Set
Collection接口表示一个容器,容器中只能存储引用数据类型,建议存同一类型的引用类型,方便后续遍历等操作。
他的元素是有序并且可以重复的,称为List接口:
、通过索引来确定元素的顺序,有序的 collection(也称为序列)。可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素
无序的唯一的称为Set接口:
Set接口的实现类常见的有HashSet、LinkedHashSet、TreeSet
快速遍历:
Collection继承Iterable接口,表示集合支持快速遍历。Iterable接口定义了一个方法iterator()用于获取集合的迭代器,是一个Iterator接口类型,iterator()内部返回一个实现类实现类Iterator接口。这个实现类一定具有hasNext和next方法用于判断是否有下一个元素和获取下一个元素。快速遍历就是基于迭代器工作的。
ListIterator 继承于Iterator,在Iterator的基础上提供了以正向遍历集合,也可以以逆序遍历集合。
hasNext/next 以正向遍历
hasPrevious/previous 以逆序遍历
HashSet是Set接口的实现类,底层数据结构是哈希表。
HashSet是线程不安全的(不保证同步)
如果向HashSet中存储元素时,元素一定要实现hashCode方法和equals方法
优点:添加、删除、查询效率高;缺点:无序
LinkedHashSet是Set接口的实现类,底层数据结构哈希表+链表
哈希表用于散列元素;链表用于维持添加顺序。
如果要添加自定义对象元素,也需要重写hashCode和equals方法。
TreeSet 是Set接口的实现类,底层数据结构是二叉树。
TreeSet 存储的数据按照一定的规则存储。存储规则让数据表现出自然顺序。
内部比较器与外部比较器
如果知道源代码才可以使用内部比较器,无权修改别人代码或者不知道源代码时可以用外部比较器,
内部比较器的定义:
当一个自定义对象实现Comparable并实现compareTo方法时,通过指定具体的比较策略,此时称为内部比较器。
外部比较器的认识:
Comparator 位于java.util包中,定义了compare(o1,o2) 用于提供外部比较策略。
TreeSet接受一个指定比较策略的构造方法,这些比较策略的实现类必须实现Comparator
接口。
如果只使用一次,可以用匿名内部类进行优化
Map接口:
Map接口称为键值对集合或者映射集合,其中的元素(entry)是以键值对(key-value)的形式存在。
Map 容器接口中提供了增、删、改、查的方式对集合进行操作。
Map接口中都是通过key来操作键值对,一般key是已知。通过key获取value。
Map的常用方法:
增:put/putAll
删:clear/remove
改:put
查:get/containsKey/containsValue
其他:isEmpty/size
Map的接口遍历:
通过keySet() 返回map中键的set集合
map中以键值对作为元素,键值对在map中称为entry,entrySet返回键值对的set集合。
Map接口的实现类:
HashMap、LinkedHashMap、TreeMap
而HashMap 是Map的实现类,key以HashSet存储。
HashMap 线程不安全,jdk1.2;Hashtable是HashMap的线程安全版本,jdk1.0出现
向HashMap中存储元素时,key一定要实现hashCode和equals
一般建议使用String作为Map接口的key
LinkedHashMap:
Map接口的实现类,key以LinkedHashSet存储。
哈希表散列key,链表维持key的添加顺序。
TreeMap:
Map的实现类,key以TreeSet存储。
总结:
ArrayList : 存储结构是顺序表;有序;不唯一;索引查询,效率高;但是添加或者删除效率低
LinkedList : 存储结构是链表;有序;不唯一;查询效率低,但是添加或者删除效率高
HashSet : 存储结构是哈希表,无序,唯一,查询效率高,添加删除效率高
HashMap : 存储结构是哈希表,Key无序,Key唯一,查询效率高,添加删除效率低
LinkedHashSet : 存储结构是哈希表+链表,有序,唯一,查询效率和添加删除效率都高
LinkedhashMap : 存储结构是哈希表+链表,Key无序,Key唯一,查询效率和添加删除效率都高
Treeset : 存储结构是二叉树,有序(升序),唯一,查询效率中等,添加删除效率中等
TreeMap : 存储结构是二叉树,有序(升序),Key唯一,查询效率中等,添加删除效率中等