Thinking in java version4:SE5/6:容器知识点整理

容器通识

  • 默认的ArrayList可以存入任何对象
  • 默认的ArrayList取出的是Object引用
  • 使用泛型:可以在编译期防止错误类型的对象放置到容器中
  • 所有Collection都可用foreach语法遍历

ArrayList:

  • “可自动扩容的数组”:实现了基于动态数组的数据结构
  • 初始化大小是:10
  • 扩容大小规则是:扩容后的大小= 原始大小+原始大小/2 + 1
  • 扩容机制:新增的时候发现容量不够用了,就去扩容
  • 空间浪费:list列表的结尾预留一定的容量空间
  • 存取时间复杂度:O(1)
  • 查找/插入/删除时间复杂度:O(n)
  • 频繁插入/删除元素会触发底层数组频繁拷贝造成效率低下和内存浪费

LinkedList:

  • “一种可修改的序列”:基于链表,允许被创建之后添加元素、移除元素,自我调整尺寸
  • 实现了Queue接口,可向上转型为Queue
  • 查找/存取第 n 个数据以及查找/存取指定的数据的时间复杂度是 O(N)
  • 插入和删除数据的时间复杂度是 O(1)
  • 提供优化后的顺序访问
  • 提供用作栈、队列或双端队列的方法
  • 空间浪费:储存每一个节点本身所需要的空间
  • 初始化大小:无
  • 扩容的机制:无,就是一直在前面或者后面新增就好

Iterator:

  • 只能单向移动
  • 基本方法:iterator()(来自容器),next(),hasnext(),remove()
  • 调用remove()前必须调用next(),因为remove()移除的是由next()产生的最后一个元素
  • 优势:遍历序列的操作与序列底层的结构分离

ListIterator

  • Iterator子类,只能用于List类的访问
  • 可以双向移动
  • 可以用set()方法替换它访问的最后一个元素

Stack

  • 使用LinkedList实现
  • 推荐使用 net.mindview.util.stack

Set

  • Set就是Collection,接口完全相同
  • HashSet:使用散列函数进行储存:最快的获取元素方式
  • TreeSet:将元素存储在红-黑树中:保持有序
  • LinkedHashSet:使用散列函数进行储存:用链表维护元素的插入顺序

Queue

  • Java里的Queue是个接口
  • 实现1:LinkedList
  • 实现2:PriorityQueue:调用offer()方法插入一个对象时,这个对象会在队列中被排序,默认顺序为自然顺序,通过提供Comparator来修改顺序。调用peek()、poll()、remove()方法时,获取的是队列中最高优先级的元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值