2019-04-21 笔记

2019-04-21  本文已影响0人  1620

java jdk Collection and Map 关系图(实线是继承虚线是实现)

JavaCollectionAndMap.png

Collection

//实现了List,并且实现了RandomAccess 实现了这个接口标准代表支持可随机访问,比如Vectory也实现了RandomAccess,
//而LikedList却没有实现,这只是一种分类思想,因为处理事情不一样所以依赖的标准也不一样
  public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
   //注意看它定义了一个Object数组 这里和Vector中elementData不一样,多了transient 不支持序列化,
  //并在当前类重写了 readObject和writeObject方法,这样在传输中不占用空间,保证了效率

   transient Object[] elementData; // non-private to simplify nested class access

   //添加元素时实际是将元素值赋值给数组对应的下标     elementData[size++] = e;
   public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
    }
  //首先我们看下LinkedList实现了List,并且实现了Dque双向队列可 以支持LIFO形式也可以支持LIFO形式,详细情况可以单独去看Dque的实现
  public class LinkedList<E>
  extends AbstractSequentialList<E>
  implements List<E>, Deque<E>, Cloneable, java.io.Serializable


   // 添加元素
   public boolean add(E e) {
      linkLast(e);
      return true;
   }  

  //Node 是链表的实现方式,添加元素是向末尾添加
   void linkLast(E e) {
      final Node<E> l = last;
      final Node<E> newNode = new Node<>(l, e, null);
      last = newNode;
      if (l == null)
          first = newNode;
      else
          l.next = newNode;
      size++;
      modCount++;
  }
//与List 实现的内容一模一样
public class Vector<E> extends AbstractList<E>
  implements List<E>, RandomAccess, Cloneable, java.io.Serializable
//为什么和ArrayList 一模一样 还做一个Vector呢? 因为行为实现不一样
//它是安全的,因为它里面的public 方法都用了synchronized 互斥锁保证了线程安全,
//但这个锁不是一个优雅的锁实现,而是一个重量级锁,它的性能会比较差
//另外扩容倍数不一样

 public synchronized boolean add(E e) {
        modCount++;
        ensureCapacityHelper(elementCount + 1);
        elementData[elementCount++] = e;
        return true;
    }

Set

继承了 Collection interface 线性方式存储,集合元素不可重复,Set 有三个实现分别为 HashSet, SortedSet

上一篇 下一篇

猜你喜欢

热点阅读