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的比较的主要内容,如果未能解决你的问题,请参考以下文章

数组,list,map,set各有啥优缺点;

ListSetMap

ListSetMap区别三者异同

ListSetMap的区别

ListSetMap的区别

java中listsetmap区别(转)