Java Collection Summary

HashSetTreeSet区别:

//主要是两方面:1、底层数据结构的实现;2、如何实现唯一性

HashSet:底层数据结构是哈希表,线程不安全.

HashSet是如何保证元素唯一性的呢?  

是通过元素的两个方法,hashCode和equals来完成。 

如果元素的HashCode值相同,才会判断equals是否为true。   

如果元素的hashcode值不同,不会调用equals。


TreeSet:底层数据结构是二叉树.  

保证元素唯一性的依据:compareTo方法return 0.

方法一、实现comparable接口,重写compareTo()方法。

方法二、自定义比较器实现Comparator接口

当元素自身不具备比较性或者具备的比较性不是所需要的,这时,就需要让容器自身具备比较性;在集合初始化时,就具有比较方式。

TreeSet ts =new TreeSet(new MyCompare());  


HashSet和HashMap的区别:

*HashMap* *HashSet*
HashMap实现了Map接口 HashSet实现了Set接口
HashMap储存键值对 HashSet仅仅存储对象
使用put()方法将元素放入map中 使用add()方法将元素放入set中
HashMap中使用键对象来计算hashcode值 HashSet使用成员对象来计算hashcode值,对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性,如果两个对象不同的话,那么返回false
HashMap比较快,因为是使用唯一的键来获取对象 HashSet较HashMap来说比较慢

上面的表格来源于:http://www.importnew.com/6931.html

Hashtable和HashMap的区别:

1、hashMap允许空键值,而hashTable不允许(因为要根据键来寻找对应的值)。

2、hashTable方法是同步的(synchronized),而hashMap不是。

3、HashTable继承自Dictionary类

public class Hashtable<K,V>extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable {}
而 HashMap继承自AbstractMap,是Map 接口的一个实现;

public class HashMap<K,V>
    extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable{}
★ 这也说明了两者的相同点都是Map接口的实现。

HashMap和TreeMap,linkedHashMap的区别:

HashMap是基于哈希表的Map接口的实现,并允许使用null值和null键。此类不保证映射的顺序,特别是他不保证该顺序恒久不变。

TreeMap是基于红黑树的NavigableMap实现。该映射根据其键的自然顺序进行排序,或者根据映射时创建的Comparator进行排序。

LinkedHashMap HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现。


ConcurrentMap和HashMap的区别:

1、ConcurrentMap 是线程安全的,而hashMap不是线程安全的。

2hashMap可以有null的键,concurrentMap不可以有。

3ConcurrentMap的操作都是原子操作,hashMap不是。ConcurrentMap 
提供其他原子putIfAbsent、remove、replace 方法的 Map。



keyset 和 entryset的区别:

keyset()迭代后只能通过get()取value.

entrySet():迭代后可以e.getKey(),e.getValue()取key和value。返回的是Entry接口(接口Map的一个内部接口).

Keyset()的速度比entryset()慢。


LinkedListArrayListVector的区别:

1LinkedList使用双链表来实现,很适合数据的动态插入、删除,随机访问和遍历速度比较慢。此外,它还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素。

2、 ArrayList 采用数组的形式来保存对象,这种方式将对象放在连续的位置中,最大缺点是插入删除比较麻烦。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。

3、Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。 

ArrayList在内存不够时默认是扩展50% + 1个,Vector是默认扩展1倍。



原文地址:https://www.cnblogs.com/jinfenglee/p/4388744.html