Java容器

Java容器
java容器主要包括Collection和Map两种,Collection存储着对象的集合,Map存储着键值对的映射表
Set:
TreeSet:基于红黑树实现,支持有序性操作。效率不高
HashSet:基于哈希表实现,支持快速查找,但不支持有序性操作
LinkedHashSet:具有HashSet的查找效率,内部使用双向链表维护元素的顺序
List:
ArrayList:基于动态数组实现,支持随机访问
Vector:线程安全的ArrayList
LinkedList:基于双向链表,只能线性访问,但是可以快速地在链表中间插入或删除元素。可以用做栈,队列和双向队列
Queue:
LinkedList:同上
PriorityQueue:基于堆结构实现,可以利用其实现优先队列
HashTable:
线程安全地HashMap,不建议使用
设计模式:
迭代器模式:
Collection继承了Iterable接口,其中地iterator()方法能够生产一个Iterator对象,tongguo这个对象就可以迭代遍历Collection中地元素
适配器模式
java.util.Arrays#asList()可以把数组类型转换为List类型
源码:
ArrayList
RandomAccess接口标志着该类支持快速随机访问
扩容:
添加元素时,使用ensureCapacityInternal()方法保证足够容量,容量不够时用grow()方法进行扩容
新容量地大小为oldCapacity+(oldCapacity>>1)也就是加上原来一半地容量。扩容时需要调用Array.copyOf()把原数组复制到新数组中,这个操作地代价极大。可以在创建ArrayList对象时就指定大概地容量大小
删除元素:
会调用System.arraycopy将index+1后面地元素都复制到index上,非常消耗时间
序列化:
保存元素地数组elementData使用transient修饰,该关键字声明数组默认不好会被序列化
Fail-Fast
modCount用来记录ArrayList结构发生变化地次数(设置元素地值不算结构发生变化)。进行序列化或进行迭代操作时,需要比较操作前后modCount是否改变,如果改变了需要抛出ConcurrentModificationException

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值