List、Set、Map的比较

来源:互联网 发布:淘宝货到付款付款方式 编辑:程序博客网 时间:2024/06/06 10:44

一、继承关系

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算法都大概一样,所以性能不会有很大的差异。







 

0 0
原创粉丝点击