美文网首页
java 集合类

java 集合类

作者: 七宝qb | 来源:发表于2017-04-12 10:28 被阅读10次

    Collection<--List<--Vector
    Collection<--List<--ArrayList
    Collection<--List<--LinkedList
    Collection<--Set<--HashSet
    Collection<--Set<--HashSet<--LinkedHashSet
    Collection<--Set<--SortedSet<--TreeSet

    List:

    Vector : 基于Array的List,其实就是封装了Array所不具备的一些功能方便我们使用,它不可能走出Array的限制。性能也就不可能超越Array。所以,在可能的情况下,我们要多运用Array。另外很重要的一点就是Vector“synchronized”的,这个也是Vector和ArrayList的唯一的区别。
    ArrayList:同Vector一样是一个基于数组实现的,但是不同的是ArrayList不是同步的。所以在性能上要比Vector优越一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。
    array 同步方法线程锁定

    List list = Collections.synchronizedList(new ArrayList()); 
    synchronized(list) { 
    Iterator i = list.iterator(); 
    while (i.hasNext()) {......} 
    } 
    

    LinkedList:LinkedList不同于前面两种List,它不是基于Array的,所以不受Array性能的限制。它每一个节点(Node)都包含两方面的内容:1.节点本身的数据(data);2.下一个节点的信息(nextNode)。所以当对LinkedList做添加,删除动作的时候就不用像基于Array的List一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了。这就是LinkedList的优势。

    List总结:

    1. 所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。例如:[ tom,1,c ];
    2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];
    3. 所有的List中可以有null元素,例如[ tom,null,1 ];
    4. 基于Array的List(Vector,ArrayList)适合查询,而LinkedList(链表)适合添加,删除操作。

    Set

    Set则是 在HashMap的基础上来实现的,这个就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key作为Set的对应存储项。看看 HashSet的add(Object obj)方法的实现就可以一目了然了。
    public boolean add(Object obj)
    {
    return map.put(obj, PRESENT) == null;
    }
    这个也是为什么在Set中不能像在List中一样有重复的项的根本原因,因为HashMap的key是不能有重复的。
    LinkedHashSet:HashSet的一个子类,一个链表。
    TreeSet:SortedSet的子类,它不同于HashSet的根本就是TreeSet是有序的。它是通过SortedMap来实现的。(HashSet和TreeSet均为有序的顺序由小到大)

    Set总结:

    1. Set实现的基础是Map(HashMap);
    2. Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象

    相关文章

      网友评论

          本文标题:java 集合类

          本文链接:https://www.haomeiwen.com/subject/efapattx.html