ArrayList与LinkList
ArrayList
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
1.可以看到是是实现了RandomAccess接口,查找效率比较快,是和频繁查找的操作使用
private static final int DEFAULT_CAPACITY = 10;
2.初始容量为10
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);//每次扩容1.5倍
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);//扩容是基于Arrays.copy技术
}
3.每次扩容1.5倍,扩容是基于Arrays.copy技术把原来的数据和扩从后的容量大小复制给新的数组.
transient Object[] elementData; // non-private to simplify nested class access
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
4.底层是基于数组实现没有大小限制,除非内存不够用
5.由于是基于数组,具有序不唯一的特点
6.数组在内容中存放的地址是连续的,要找到某个元素,只需要把数组的起始地址加上索引乘以元素的大小就可以循序定位到要找的元素(baseaddress+i*sizeof(int)) 时间复杂度是o(1),但是LinkedList是o(n)
、差集
list9.removeAll(list10);
并集
addAll(list8)
交集:list3.retainAll(list4);
LinkedList:
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
1.继承是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。
2. 由于它的底层是用双向链表实现的,所以它对元素的增加、删除效率要比ArrayList好;它是一个双向链表,没有初始化大小,也没有扩容的机制,就是一直在前面或者后面新增就好。



HashSet:
public HashSet() {
map = new HashMap<>();
}
1.还是用HashMap实现,所以无参数的构造函数,此构造函数创建一个大小为16的容器,加载因子为0.75
每次扩容2的n次幂
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
public boolean add(E e) {
return map.put(e, PRESENT)==null;//去重规则使用了HASHMAP的put方法,
}
由于hashmap
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
((k = p.key) == key || (key != null && key.equals(k))))
进行了hashcdoe和queals比较,相同的key不再继续添加
2.每次添加的value放在了Key,原来的value有固定值PRESENT
3.且无序唯一,可以存放一个null值
LinkHshMap
:
*/
public class LinkedHashMap<K,V>
extends HashMap<K,V>
implements Map<K,V>
1.实现了hashmap,具有hsahmap特性
static class Entry<K,V> extends HashMap.Node<K,V> {
Entry<K,V> before, after;
Entry(int hash, K key, V value, Node<K,V> next) {
super(hash, key, value, next);
}
}
2.内部实现了双向列表
afterNodeRemoval,afterNodeInsertion,afterNodeAccess。这三个方法的主要作用是,在删除,插入,获取节点之后,对链表进行维护
3.具有前后节点表示,便于拼房的修改维护有好处
TreeMap: TreeMap元素默认排序是按照自然排序,对于Integer是按照升序,如果是字符,返回的set,key是有序的 存储使用了红红黑树 红黑树是自平衡树,以上属性保证基本操作,例如:搜索 、获取、增加、和删除时间复杂度是O(log n),在增加和删除过程中不会出现长分支,短分支的情况
本文来自博客园,作者:余生请多指教ANT,转载请注明原文链接:https://www.cnblogs.com/wangbiaohistory/p/16129483.html

浙公网安备 33010602011771号