java常用的Collection

HashMap

hashMap作为最常用的数据结构之一要记住,其实现顺序为先对数据进行hash,根据其hashcode跟size进行取模操作得到下标,如果在下标处已经有结点了,那么就存储为链表,以头插法进行插入。

hashmap拥有两个默认参数,初始大小如果没有指定为16,负载因子默认0.75,即如果hashmap中的数据大小超过了容量乘以负载因子那么就会进行一次扩容。

hashMap的size为2的N次方,因为取模时间耗时较长,所以hashMap中使用2的n次方-1进行位操作(&)来取模,效果是一样并且效率更高。

hashmap不能处理并发问题,在多线程中调用了扩容的rehash方法容易出现环状链表,当获取一个不存在的key时,容易出现死循环。

LinkedHashMap

继承了hashMap类,声明了一个头结点和尾结点,使用了链表结构有两种顺序,根据访问顺序或者是写入顺序,访问顺序是每次在get的时候就在结点放到链表最后。

Hashset

hashSet继承了hashmap,于hashmap的不同之处就在于不能记录重复的key,存入重复的key会覆盖原来的value。

ArrayList and Vector 

两者皆是继承了List 类十分类似,区别在于ArrayList 继承了randomacess 可以进行随机访问,Vector的add和insert方法都被synchronized修饰,所以Vector是一个同步容器,不适用于并发。

两者还都是动态容器,所谓动态容器就是在每次插入和新增的时候会先进行扩容,扩容之后会复制数据到新的容器中,所以使用动态容器最好指定大小,不然多次扩容很影响效率。

ArrayList 的属性默认用transient关键字修饰,防止被自动序列化,重写了序列化和反序列方法,只会序列化已经被使用的内存地址。

LinkedList

LinkedList也实现了List接口,是由双向链表实现的,在查询的时候移动指针,保存了头结点和尾节点,如果查询的index在后半结点,那么会从后往前遍历。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值