集合

1.list

a.ArrayList 底层实现数据结构是可变数组,默认容量10,扩增1.5倍 线程不安全
int newCapacity = oldCapacity + (oldCapacity >> 1);//新容量,扩容1.5倍,自查>>位运算


b.LinkedList 底层实现原理链表 线程不安全

c.Vector 线程安全 默认容量10  capacityIncrement扩增参数

扩增2倍
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + ((capacityIncrement > 0) ?capacityIncrement : oldCapacity);

2.set

a.hashset 底层实现 hashmap 实现 默认大小16 增长因子0.75
源码底层实现
public HashSet() {
    map = new HashMap<>();
}

add操作

private static final Object PRESENT = new Object();常量
public boolean add(E e) {
   return map.put(e, PRESENT)==null;
}

3.map

数组+链表

hashmap 链表长度>8转换为红黑树(二叉树平衡) 底层实现 hashmap 实现 默认大小16 增长因子0.75

hashmap 可以key,value为null (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);

hash冲突

开放定址法:一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。没有空的位置就会进行扩容。

链地址法: 
将所有关键字为同义词的记录存储在一个单链表中,一旦发生冲突,在当前位置给单链表增加结点就行。 
缺点:查找时需要遍历单链表的性能损耗。

1.7链表头部插入
1.8链表尾部插入 链表长度>7转换为红黑树(二叉树平衡) 最短路径*2>=最长路径 平衡破坏



hashtable 不可以为null 底层实现为null抛出异常 11容量

int newCapacity = (oldCapacity << 1) +1;

为什么线程安全 synchronized关键字修饰
public synchronized V put(K key, V value) {
        // Make sure the value is not null
        if (value == null) {
            throw new NullPointerException();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值