ListSetMap的比较
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ListSetMap的比较相关的知识,希望对你有一定的参考价值。
一、继承关系
list和set继承Collection.接口。Map没有继承Collection接口。
体系图:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java JDK不能提供直接继承自Collection的类,Java JDK提供的类都是继承自Collection的"子接口",如:List和Set。
List详解:
list是有序的,可以存储重复元素的。list通过下标来存取值。
List接口有三个实现类:LinkedList,ArrayList,Vector
LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢
ArrayList和Vector的区别:ArrayList是非线程安全的,效率高;Vector是基于线程安全的,效率低
Set详解:
setz是无序的,不能存储重复元素的。
Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet
SortedSet接口有一个实现类:TreeSet(底层由平衡二叉树实现)
--HashSet 为快速查找而设计的Set ,存入HashSet对象必须定义hashCode().
--TreeSet 保护次序的Set ,使用它可以从Set 中提取有序序列.
--LinkedHashSet 具有HashSet的查询速度,且内部使用链表维护元素的次序.
它们之间的存储方式不一样:
TreeSet采用红黑树的树据结构排序元素.
HashSet采用散列函数,这是专门为快速查询而设计的.
LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素的次序.
Map详解:
Map接口有三个实现类:HashMap,HashTable,LinkeHashMap 。
HashMap非线程安全,高效,支持null;HashTable线程安全,低效,不支持null
SortedMap有一个实现类:TreeMap
HashMap和Hashtable的区别:
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下,效率要高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
以上是关于ListSetMap的比较的主要内容,如果未能解决你的问题,请参考以下文章