java集合的主要分为三种类型:List、Set、Map
(1)List 主要有ArrayList、LinkedLis(List的特征是其元素以线性方式存储,可以存放重复对象)
ArrayList的 优点:查询效率高
缺点:向List中间插入与移除元素的速度很慢
LinkedLis的 优点:LinkedList 适用于要头尾操作或插入指定位置的场景
缺点:查询效率低
总结:当需要对数据进行多次访问的情况下选用ArrayList
当需要对数据进行多次增加删除修改时用LinkedList
(2)Set的实现类主要有HashSet、TreeSet和LinkedHashSet(Set的特征是对象不按特定的方式排序,不能放重复对象)
HashSet: 为快速查找而设计。存入HashSet的对象必须定义hashCode()。
TreeSet: 保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。
LinkedHashSet:具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。
于是在使用迭代器遍历Set时,结果会按元素插入的次序显示
总结:HashSet是基于Hash算法实现的,其性能通常都优于TreeSet
通常都应该使用HashSet,在我们需要排序的功能时,我们才使用TreeSet
(3)Map的实现类主要有HashMap和TreeMap还有LinkedHashMap、WeakHashMap、IdentifyHashMap
(Map的特征是存放键值对)
HashMap:使用对象的hashCode()进行快速查询,此方法能够提高性能
TreeMap : 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在 于,你得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。
LinkedHashMap:类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时发而更快,因为它使用链表维护内部次序
WeakHashMap:弱键(weak key)Map,Map中使用的对象也被允许释放: 这是为解决特殊问题设计的。如果没有map之外的引用指向某个“键”,则此“键”可以被垃圾收集器回收
IdentifyHashMap: 使用==代替equals()对“键”作比较的hash map。为解决特殊问题而设计
List、Set都是继承自Collection接口,而Map不是
List:元素放入有顺序,元素可以重复,List可以动态增长,查找元素效率高,插入删除元素效率低
Set:元素放入无顺序,元素不可重复,检索元素效率低下,删除和插入效率高
Map:用来存储键值对