fill(list, T obj)
方法都只是复制一份对象的引用,并没有额外创建对象,并且只能填充List,它会将容器内的元素清空再添加元素。nCopies(int n, T o) 返回一个List 功能和fill一模一样。
public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! //关键代码:elementData = Arrays.copyOf(elementData, newCapacity); elementData[size++] = e; return true; }
remove方法 使用本地方法直接操作内存改变, numMoved = size - index - 1; 最后将数组最后一个元素设为null
System.arraycopy(elementData, index+1, elementData, index, numMoved); elementData[--size] = null; // clear to let GC do its work
值得注意的是 size是ArrayList内元素个数,并不是数组长度,ArrayList内数组长度默认最小是10
private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; } }
private static final Object PRESENT = new Object(); public boolean add(E e) { return map.put(e, PRESENT)==null; }
static class Entry<K,V> implements Map.Entry<K,V> { final K key; V value; Entry<K,V> next; int hash;
static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; Node<K,V> next;
可以看出只是改了个名字而已。
Object obj = new Object(); SoftReference<Object> sf = new SoftReference<Object>(obj); obj = null; sf.get();//有时候会返回null
Node<K,V>[] tab; if (tab == null || tab.length == 0)
原文:https://www.cnblogs.com/mibloom/p/9365545.html