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则不能存入

posted on 2016-03-16 11:05  tankwork  阅读(474)  评论(0)    收藏  举报