java collection详解

来源:互联网 发布:numpy 矩阵列归一化 编辑:程序博客网 时间:2024/06/05 04:35

collection和map的结构大概图:


从图中可以看出:主要分成list,set,map,queue(不常用)这四个,

List主要的类有ArrayList、LinkedList、Vector;

List类:

ArrayList:

     基于数组(list)的存储方式,数据可以重复,有下标,与线程不同步,这是与Vector的最主要区别,所以效率高。

Vector

     基于数组(list)的存储方式,数据可以重复,有下标,与线程同步,效率比ArrayList低,但安全性比较高。

linkedList

     采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引,缺点:读取速度慢,
 允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
  注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:
    List list = Collections.synchronizedList(new LinkedList(...));

List总结:

ArrayList和Vector

     读取速度快,插入和删除速度较慢,因为有下标可以查询,插入的时候只能先查询,后在最尾端判断无内容再插入

LinkedList

     读取速度慢,插入和速度快,因为存储的方式不同,每个空间保留有下一个索引,索引插入的时候直接房间数组里,内部自行会判断索引内是否有值,无值就放入,

 读取的时候只能从头到尾查找,


ArrayList 和 LinkedList 区别

   ArrayList是动态数组, LinkedList是链表数组

查询方面,动态数组能直接指定下标获取数据,链表结构的,只能从开始一直查找到你所指定的下标, 找出数据,  所以 ArrayList会快 LinkedList

增加和删除方面:动态数组直接对原数据进行操作,链表数据知识对下标进行操作,   所以LinkedList 快ArrayList


Set类(特点:数据不能重复)

HashSet:基于set的存储,数据无序插入,且数据不能重复,重复会覆盖;

判断数据是不是重复根据数值的:hashcode,来判断

LinkedHashSet,数据插入时有序,但数据依旧不能重复。插入性能比hashset差

判断数据是不是相等根据:equal判断

TreeSet:数据插入时有序,数据依旧不能重复,靠自然排序和客户化排序

判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0

Set总结:

    Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象,


Map类

       HashMap是一个最常用的Map,遍历时,取数据是随机的,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为null,不允许多条记录的值为null。HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要同步,可以用Collections.synchronizedMap(HashMap map)方法使HashMap具有同步的能力。
       Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,然而,这也导致了Hashtable在写入时会比较慢。
      LinkedHashMap保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插入的。在遍历的时候会比HashMap慢。有HashMap的全部特性。
      TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用Iteraor遍历TreeMap时,得到的记录是排过序的。TreeMap的键和值都不能为空。


   HashMap和HashTable区别:

    1、hashtable与线程同步,效率较差但安全性较高。hashmap不与线程同步,效率较高但相对hashtable安全性较差

    2、map的键值对可以为空,有且只有一个,hashtable不能为空

    3、出示的数组容量不同。


总结:

  1、ArrayList 单个元素,效率高,多用于查询。

   2、Vector单个元素,安全性高,多用于查询。

   3、LinkedList单个元素,效率高,多用于插入和删除,(如果频繁插入和删除优先考虑)

   4、HashMap: 元素成对,元素可为空

   5、HashTable:元素成键值对,元素不能为空。

 


0 0
原创粉丝点击