集合API总结

题型总结

Collection

Collections

Collections只能给List排序,给set排序,可以转成list集合再排序。
TreeSet默认可以给基本类型排序
在这里插入图片描述
在这里插入图片描述

队列

API

队列是接口,有LinkedList,ArrayDeque,PriorityQueue(堆)等实现类
队列的api
offer 给队列尾部插入元素
poll 删除队列头部大的元素
peek 返回队列头部元素
(add,remove也是可以的)

  • *622. 设计循环队列
    关键在于循环队列头尾指针的定义:头指针head指头结点,尾指针tail指下一次插入元素的位置,不是尾结点的位置。

API

栈是类,实现了collection、List接口,继承了Vector类
栈的api
push 向栈压入元素
pop 从栈顶弹出元素
peek 查看栈顶元素

双端队列

API

双端队列既可以当作队列,也可以当作栈。
LinkedList,ArrayDeque
LinkedList的api
offerFirst 在头部插入元素
offerLast 在尾部插入元素
pollFirst 弹出头部元素
pollLast 弹出尾部元素
peekFirst 查看头部元素
peekLast 查看尾部元素

API

堆的比较器很灵活,堆存储的是一种数据A,比较器可以以数据A为依据,拿到别的数据B然后再去做比较,为数据A做排序。如347. 前 K 个高频元素

概念理解

使用堆比给数组排序和给List排序效率更高。例:295. 数据流的中位数,6039. K 次增加后的最大乘积

第K大 第K小

第1大是最大的那个数,第2大是仅次于最大的那个数,依此类推,第K大是从大到小排序,第K个元素就是第K大,适用于大顶堆。
同理可得第K小是从小到大排序的,适用于小顶堆。

哈希

API

collection与Map
collection以及Map集合都有
isEmpty 集合是否为空
size 集合存储的元素个数

Set

只要放在TreeSet中的元素对象,在该对象的类中必须实现Comparable接口,必须覆盖该接口中的compareTo()方法,并在该方法中编写比较规则。(该方法不能自动生成)

自然排序: 自定义类实现Comparable接口,重写compareTo方法,根据返回值进行排序
​比较器排序: 创建TreeSet对象的时候传递Comparator的实现类对象,重写compare方法,根据返回值进行排序
TreeSet的自然排序和定制排序
TreeSet集合中自然排序和比较器排序概述和总结

迭代器

java.util.ConcurrentModificationException

并发模式下,使用迭代器遍历集合,集合的remove方法可能会报java.util.ConcurrentModificationException
原因是:
ArrayList的remove方法修改的变量是继承自AbstractList的变量modCount;而Itr的remove方法修改的是自身的变量expectedModCount。这两个变量的作用都是记录修改次数的。

在用ArrayList进行删除操作以后,modCount改变了,但是迭代器中的expectedModCount 还是原样不动。所以,在用ArrayList的remove方法进行删除操作以后,Itr里面的expectedModCount会与ArrayList的modCount进行比较,二者不相等,所以会抛错。

原文链接:https://blog.csdn.net/qq_35056292/article/details/79751233

解决办法使用迭代器的删除方法iterator.remove(),iterator.remove()会调用集合的remove方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值