JAVA常见的集合类特点分析

java集合类存放于java.util包中,集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用,集合类型主要有3种:set(集)、list(列表)和map(映射)。

Java API中所用的集合类,都是实现了Collection接口,它的一个类继承结构如下:

Collection<--List<-- Vector
Collection<--List<-- ArrayList
Collection<--List<--LinkedList
Collection<--Set<-- HashSet
Collection<--Set<--HashSet<--LinkedHashSet
Collection<--Set<--SortedSet<--TreeSet
 
List(有序,可重复):      1.Vector  底层数据结构是数组,查询快,增删慢,线程安全,效率低。
                                2.ArrayList 底层数据结构是数组,查询快,增删慢 , 线程不安全,效率高。
                                3.LinkedList 底层数据结构是链表,查询慢,增删快,线程不安全,效率高。
Set(无序,唯一)    :     1.HashSet 底层数据结构是哈希表; 哈希表依赖两个方法:hashCode()和equals() ,执行顺序:首先判断hashCode()值是否相同,如果是,继续执行equals(),看其返回值如果为true说明元素重复,则不添加 ,如果是false就添加到集合 。若hashCode()值不相同:就直接添加到集合
                                2.LinkedHashSet  底层数据结构由链表和哈希表组成。链表保证元素有序,哈希表保证元素唯一。
                                3.TreeSet 底层数据结构是红黑树。(是一种自平衡的二叉树)  根据比较的返回值是否是0来保证元素唯一性,其元素的排序通常为两种方式,第一种方式为自然排序(元素具备比较性) ,让元素所属的类实现Comparable接口 , 第二种方式为比较器排序(集合具备比较性) ,让集合接收一个Comparator的实现类对象。
 
map(映射)           :     1.Map集合的数据结构仅仅针对键有效,与值无关。存储的是键值对形式的元素,键唯一,值可重复。 
                                2.hashMap 底层数据结构是哈希表。线程不安全,效率高 ; 哈希表依赖两个方法:hashCode()和equals();hashCode()和equals()执行顺序为 : 首先判断hashCode()值是否相同,如果是true则继续执行equals(),若返回值是true, 则说明元素重复,不添加,反之则添加; 若首先判断hashCode()值是false, 则添加到集合中。
                                3.LinkedHashMap 底层数据结构由链表和哈希表组成;链表保证元素有序, 哈希表保证元素唯一。
                                4.Hashtable 底层数据结构是哈希表。线程安全,效率低; 哈希表依赖两个方法:hashCode()和equals();hashCode()和equals()执行顺序为 : 首先判断hashCode()值是否相同,如果是true则继续执行equals(),若返回值是true, 则说明元素重复,不添加,反之则添加; 若首先判断hashCode()值是false, 则添加到集合中。
                                5.TreeMap 底层数据结构是红黑树(一种自平衡的二叉树) ,其根据比较的返回值是否是0来保证元素唯一性, 元素的排序通过两种方式:第一种是自然排序(元素具备比较性) 即让元素所属的类实现Comparable接口,第二种是比较器排序(集合具备比较性) ,即让集合接收一个Comparator的实现类对象。
 
集合选取原则

1.判断集合是否是键值对形式: 若是则考虑选择Map,在考虑键是否需要排序,若不需要排序则选择HashMap,若需要排序则选择TreeMap。

2.集合若不是键值对形式,判断集合存储的元素是否需要唯一,若需要则选择Set,在此基础上若元素需要排序,则选择TreeSet,反之则选择HashSet;若判断集合存储的元素不需要唯一,则选择List,在此基础上若选择线程安全,则选择Vector,若不考虑线程安全但为了效率高则选择ArrayList或者LinkedList,在此基础上,若查询多就选择ArrayList,若增删多就选择LinkedList。

 

集合方法摘要 可查看JDK文档,此处附一个JDK在线文档的链接:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh,平时可以多看JDK文档里面的方法,方便书写代码时可用。

 

 

 
 

转载于:https://www.cnblogs.com/zhouxinlin/p/8379253.html

你可能感兴趣的:(JAVA常见的集合类特点分析)