ArrayList

  • 構造方法
  • 構造方法可以指定大小
public ArrayList(int initialCapacity) 

  • 無參構造方法初始化是默認大小爲  10
public ArrayList() {
    this(10);
    } 
注意,此實現不是同步的。如果多個線程同時訪問一個 ArrayList 實例,而其中至少一個線程從結構上修改了列表,那麼它必須 保持外部同步。(結構上的修改是指任何添加或刪除一個或多個元素的操作,或者顯式調整底層數組的大小;僅僅設置元素的值不是結構上的修改。)這一般通過對自然封裝該列表的對象進行同步操作來完成。如果不存在這樣的對象,則應該使用 Collections.synchronizedList 方法將該列表“包裝”起來。這最好在創建時完成,以防止意外對列表進行不同步的訪問:
List list = Collections.synchronizedList(new ArrayList(...)); 

在添加大量元素前,應用程序可以使用 ensureCapacity 操作來增加 ArrayList 實例的容量。這可以減少遞增式再分配的數量  old*1.5+1 的增量
 public void ensureCapacity(int minCapacity) {
    modCount++;
    int oldCapacity = elementData.length;
    if (minCapacity > oldCapacity) {
        Object oldData[] = elementData;
        int newCapacity = (oldCapacity * 3)/2 + 1;
            if (newCapacity < minCapacity)
        newCapacity = minCapacity;
        elementData = (E[])new Object[newCapacity];
        System.arraycopy(oldData, 0, elementData, 0, size);
    }
    } 
 

方法

  • 判斷是否爲空
 public boolean isEmpty() {
    return size == 0;
    }  
  • 增加元素,會自動增加容量
 public boolean add(E o) {
    ensureCapacity(size + 1);  // Increments modCount!!
    elementData[size++] = o;
    return true;
    } 
  • 在指定索引處增加
 public void add(int index, E element) {
    if (index > size || index < 0)
        throw new IndexOutOfBoundsException(
        "Index: "+index+", Size: "+size);
    ensureCapacity(size+1);  // Increments modCount!!
    System.arraycopy(elementData, index, elementData, index + 1,
             size - index);
    elementData[index] = element;
    size++;
    } 
  • 刪除,null 賦值給對象,垃圾回收
public E remove(int index) 
elementData[--size] = null// Let gc do its work 
  • 清空list
  public void clear() {
    modCount++;
    // Let gc do its work
    for (int i = 0; i < size; i++)
        elementData[i] = null;
    size = 0;
    }  
  •  添加集合
  public boolean addAll(Collection<? extends E> c)
  1. List<String> list = Collections.synchronizedList(new ArrayList<String>(1));
  2. list.add("111");
  3. list.add("222");
  4. list.add("222");
  5. list.add(0,"101");
  6. List<String> list2 = Collections.synchronizedList(new ArrayList<String>());
  7. list2.add("444");
  8. //add collection
  9. list2.addAll(list);
  10. System.out.println(list2);
  11. //output [444, 101, 111, 222, 222]







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章