List Map Vector 的区别、排序方法
interface - Map<K,V>
classes - HashMap TreeMap ConcurrentHashMap LinkedHashMap HashTable
1,HashMap 使用数组和链表结构来保存元素,数组中元素的index跟key的hash值相关,如果元素的index算出来是同一个则使用链表结构保存;
LinkedHashMap 继承自HashMap,也使用数组和链表结构来保存元素,但数组中每一个元素会记录其前一个和后一个元素
2,一般情况下,我们用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择。
但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。如果需要输出的顺序和输入的相同,那么用LinkedHashMap 可以实现,它还可以按读取顺序来排列.
interface - Collection<T>
interface - List<T> Set<T>
interface - List<T>
classes ArrayList LinkedList Vector
(线性表(即数组),链表,哈希表(即数组和链表的结合)是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构。)
1,ArrayList Vector
采用数组结构存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,
但是插入删除数据要涉及到数组元素移动等操作,所以索引数据快,插入删除数据慢,
Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差;
2,LinkedList
使用双向链表结构存储数据,按序号索引数据需要进行向前或向后遍历,所以索引速度慢,
但是插入数据时只需要记录本项的前后项即可,所以插入删除数度较快;
特有方法:
getFirst() getLast() -->> peekFirst() peekLast()
//获取元素,但不删除元素
//前者列表为空抛出异常,后者(JDK1.6)返回null
removeFirst() removeLast() -->> pollFirst() pollLast()
//获取元素,并删除元素
//前者列表为空抛出异常,后者(JDK1.6)返回null
3,ArrayList LinkedList 线程不同步的,实现同步的一种方法是
List list = Collections.synchronizedList(new LinkedList(...));
4,ArrayList 当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。
5,LinkedList 提供额外的get,remove,insert方法在LinkedList的首部或尾部,这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
6,Vector 当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),
这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。
interface - Set<T>
classes HashSet TreeSet LinkedHashSet
1,Set元素不能重复,主要用处是去重;
2,HashSet 基于HashMap 实现, 值唯一且无序。因为每当往HashSet中add()一个元素,其实是向HashMap里存储一个key不同,而value相同的键和值。
实现元素唯一性的原理
先判断对象的hashCode,如果不存在则能存入,如果hashCode存在,
再判断对象的equals方法,如果false则能存入,如果true则不能存入
浙公网安备 33010602011771号