首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

教妹学 Java 第 50 讲:初探集合框架

Stack 是 Vector 一个子类,本质上也是由动态数组实现,只不过还实现了先进后功能(在 get、set、add 方法基础上追加了 pop、peek 等方法),所以叫栈。...“是的,总体上来说,Set 集合不是关注重点,因为底层都是由 Map 实现为什么要用 Map 实现呢?三妹你能猜到原因吗?” “让想想。” “嗯?...head 指向第一个有效元素,tail 指向尾第一个可以插入元素空位,因为是循环数组,所以 head 不一定从是从 0 开始,tail 也不一定总是比 head 大。...3)PriorityQueue PriorityQueue 是一种优先级队列,它顺序与元素优先级有关,执行 remove 或者 poll 方法,返回总是优先级最高元素。...3)TreeMap HashMap 是无序,所以遍历时候元素顺序也是不可测TreeMap 是有序,它在内部会对键进行排序,所以遍历时候就可以得到预期顺序。

35120

Java 集合常见知识点&面试题总结(上),2022 最新版!

为什么要使用集合?...在上面也说了,LinkedList 仅仅在头尾插入或者删除元素时候时间复杂度近似 O(1),其他情况增删元素时间复杂度都是 O(n) 。...为什么呢?觉得还是和底层数据结构有关!ArrayList 底层是数组,而 LinkedList 底层是链表。数组天然支持随机访问,时间复杂度为 O(1),所以称为快速随机访问。...Deque 扩展了 Queue 接口, 增加了在首和尾进行插入和删除方法,同样根据失败后处理方式不同分为两类: Deque 接口 抛出异常 返回特殊值 插入队首 addFirst(E e) offerFirst...说一说 PriorityQueue PriorityQueue 是在 JDK1.5 中被引入, 其与 Queue 区别在于元素顺序是与优先级相关,即总是优先级最高元素先出

30720
您找到你想要的搜索结果了吗?
是的
没有找到

关于Java集合小抄

没有按元素值排序SortedList,在线程安全类中也没有无锁算法ConcurrentLinkedList,凑合着Set与Queue中等价类时,会缺少一些List特有的方法。...(这是为什么呢?)...PriorityQueue 二叉堆实现优先级队列,详见入门教程,不再是FIFO而是按元素实现Comparable接口或传入Comparator比较结果来,数值越小,优先级越高,越先出。...当入队时队列已满,或时队列已空,不同函数效果见下表: 可能报异常 返回布尔值 可能阻塞等待 可设定等待时间 入队 add(e) offer(e) put(e) offer(e, timeout,...unit) remove() poll() take() poll(timeout, unit) 查看 element() peek() 无 无 ArrayBlockingQueue 定长并发优化

42010

堆和优先队列

我们在常见线性结构中,已经知道什么是普通队列了,普通队列就是一种“先进先出,后进后数据结构,即普通队列顺序和入队顺序是一样,但我们优先队列,它顺序和入队顺序无关,它顺序是和优先级相关...为什么使用优先队列?   举一个生活中例子,就是医院里需要做手术病人,医院不会根据哪个病人先来就先送去手术室,而是会根据病人生命危险程度来决定应该谁先进入手术室。...我们可以实现优先队列可以通过普通线性结构来实现,既不管你是通过数组实现还是链表实现,你会发现在入队时时间复杂度为O(1),但是在出时间复杂度却为O(n),因为使用顺序结构实现优先队列在进行操作时...,我们需要先遍历这个这个优先队列,找到优先级最高元素时再进行;当然我们也可以使用顺序线性结构实现优先队列,这样我们就可以在出时让时间复杂度为O(1),但是在入队时,我们时间复杂度就为O(n)了...有没什么办法让我们实现优先队列和入队操作效率都很高呢?这就是本文要讲另外一种数据结构了,我们可以通过堆来实现优先队列,堆也是一种树结构。

12310

JAVA集合框架中常用集合及其特点、适用场景、实现原理简介

,以key哈希值计算Entry在数组中index,拉链法解决哈希冲突。...二者区别在于,Queue只能在尾入队,,而Deque接口则在头和尾都可以执行/入队操作 Queue接口常用方法: add(E)/offer(E):入队,即向尾追加元素,二者区别在于如果队列是有界...,add方法在队列已满情况下会抛出IllegalStateException,而offer方法只会返回false remove()/poll():,即从头移除1个元素,二者区别在于如果队列是空...能够保证入队和操作原子性和一致性,但在遍历和size()操作时只能保证数据弱一致性。...所以本身是线程安全,但同样,只能保证入队和操作原子性和一致性,在遍历时只能保证数据弱一致性。

1.1K30

大厂必问Java集合面试题

put方法流程? 红黑树特点? 为什么使用红黑树而不使用AVL树? 在解决 hash 冲突时候,为什么选择先用链表,再转红黑树? HashMap 长度为什么是 2 幂次方?...为什么是 0.75? 一般什么作为HashMapkey? HashMap为什么线程不安全? HashMap和HashTable区别? LinkedHashMap底层原理?...红黑树是对AVL树优化,只要求部分平衡,非严格平衡来换取增删节点时候旋转次数降低,提高了插入和删除性能。 在解决 hash 冲突时候,为什么选择先用链表,再转红黑树?...CopyOnWriteArrayList中add方法添加时候是需要加锁,保证同步,避免了多线程写时候复制多个副本。...使用阻塞算法队列可以一个锁(入队和同一把锁)或两个锁(入队和用不同锁)等方式来实现。

1.2K31

夯实Java基础系列19:一文搞懂Java集合类框架,以及常见面试题

public class Queue接口 { //queue接口是对队列一个实现,需要提供队列方法。...凑合着Set与Queue中等价类时,会缺少一些List特有的方法如get(i)。...PriorityQueue 平衡二叉最小堆实现优先级队列,不再是FIFO,而是按元素实现Comparable接口或传入Comparator比较结果来,数值越小,优先级越高,越先出。...时,弹出queue[0],然后把queque[size]拿出来二叉地往下比较调整堆。 初始大小为11,空间不够时自动50%扩容。...当入队时队列已满,或时队列已空,不同函数效果见下表 ArrayBlockingQueue 定长并发优化BlockingQueue,也是基于循环数组实现。

42110

夯实Java基础系列19:一文搞懂Java集合类框架,以及常见面试题

public class Queue接口 { //queue接口是对队列一个实现,需要提供队列方法。...凑合着Set与Queue中等价类时,会缺少一些List特有的方法如get(i)。...PriorityQueue 平衡二叉最小堆实现优先级队列,不再是FIFO,而是按元素实现Comparable接口或传入Comparator比较结果来,数值越小,优先级越高,越先出。...时,弹出queue0,然后把quequesize拿出来二叉地往下比较调整堆。 初始大小为11,空间不够时自动50%扩容。...当入队时队列已满,或时队列已空,不同函数效果见下表 ArrayBlockingQueue 定长并发优化BlockingQueue,也是基于循环数组实现。

88010

从程序员转型到架构师Java集合小抄

凑合着Set与Queue中等价类时,会缺少一些List特有的方法如get(i)。...精讲架构视频资料获取方式 转发 转发 转发 关注私信回复“架构”即可领取 3.Set 所有Set几乎都是内部一个Map来实现, 因为Map里KeySet就是一个Set,而value是假值,全部使用同一个...4.1.3 PriorityQueue 平衡二叉最小堆实现优先级队列,不再是FIFO,而是按元素实现Comparable接口或传入Comparator比较结果来,数值越小,优先级越高,越先出...时,弹出queue[0],然后把queque[size]拿出来二叉地往下比较调整堆。 初始大小为11,空间不够时自动50%扩容。...当入队时队列已满,或时队列已空,不同函数效果见下表: 4.3.1 ArrayBlockingQueue 定长并发优化BlockingQueue,也是基于循环数组实现。

60600

50道Java集合经典面试题(收藏版)

扩容过程第二部一个非常重要方法是transfer方法,采用头插法,把旧数组元素插入到新数组中。 HashMap大小为什么是2幂次方?...super E> comparator; 方法: peek()//返回首元素 poll()//返回首元素,首元素队列 add()//添加元素 size()//返回队列元素个数 isEmpty()...聊到ConcurrenHashMap,需要跟面试官聊到安全性,分段锁segment,为什么放弃了分段锁,与及选择CAS,其实就是都是从效率和安全性触发,嘻嘻~ java8不是红黑树来管理hashmap...觉得,回答以上几种ArrayBlockingQueue,LinkedBlockingQueue,SynchronousQueue等,说它们特点,并结合使用到对应队列常用线程池(如newFixedThreadPool...Set里元素是不能重复,那么什么方法来区分重复与否呢? 是==还是equals()?

86611

【Java基本功】一文总结Java中集合类知识点

public class Queue接口 { //queue接口是对队列一个实现,需要提供队列方法。...凑合着Set与Queue中等价类时,会缺少一些List特有的方法如get(i)。...4.1.3 PriorityQueue 平衡二叉最小堆实现优先级队列,不再是FIFO,而是按元素实现Comparable接口或传入Comparator比较结果来,数值越小,优先级越高,越先出...时,弹出queue[0],然后把queque[size]拿出来二叉地往下比较调整堆。 初始大小为11,空间不够时自动50%扩容。...) remove() poll() take() poll(timeout, unit) 查看 element() peek() 无 无 4.3.1 ArrayBlockingQueue 定长并发优化

47330

JDK并发编程类库,有坑!!!

大家好,是冰河~~ 在之前《并发编程踩坑实录一:盘点JDK中同步容器两大坑!!》...一文中,我们主要一起学习了JDK中同步容器两个坑,一个是在使用同步容器时可能会出现 竞态条件 问题,一个是在使用同步容器时 迭代器遍历容器 可能会踩坑。...因为同步容器中所有方法都是使用synchronized锁进行互斥,串行度太高了,无法真正做到并行。 所以,在JDK1.5之后,JDK中提供了并发性能更好容器。...非阻塞队列:队列入队和操作不会阻塞。 单端队列:队列入队操作只能在尾进行,队列操作只能在首进行。 双端队列:队列入队操作和操作都可以在首和尾进行。...也可以在内部不存在队列,例如SynchronousQueue,SynchronousQueue实现了生产者入队操作必须等待消费者操作完成之后才能进行。

7310

java面试热点:集合框架(二)

Queue接口还有一个名为Deque子接口,它允许我们高效头或尾添加/删除元素,实现了Deque接口集合类即为双端队列一种实现(比如LinkedList就实现了Deque接口...null E remove() //返回并移除头元素 add与offer,element与peek,remove与poll看似是三对儿功能相同方法。...extends V> m) //创建一个新HashMap,m数据填充 常用方法如下: void clear() boolean containsKey(Object key) boolean containsValue...关于WeakHashMap和其他类具体使用方法及注意事项,大家可以参考官方文档。 下面我们来简单地介绍下另一个Map接口具体实现——TreeMap。...extends V> m) //构造一个与映射表m含有相同元素TreeMap自然序进行排列 TreeMap(SortedMap<K,?

56100

2018-06-13 关于Java集合小抄

凑合着Set与Queue中等价类时,会缺少一些List特有的方法如get(i)。...CopyOnWriteArraySet:内部是CopyOnWriteArrayList并发优化Set,利用其addIfAbsent()方法实现元素去重,如前所述该方法性能很一般。...4.1.3 PriorityQueue 平衡二叉最小堆实现优先级队列,不再是FIFO,而是按元素实现Comparable接口或传入Comparator比较结果来,数值越小,优先级越高,越先出...时,弹出queue[0],然后把queque[size]拿出来二叉地往下比较调整堆。 初始大小为11,空间不够时自动50%扩容。...当入队时队列已满,或时队列已空,不同函数效果见下表: | | 立刻报异常 | 立刻返回布尔 | 阻塞等待 | 可设定等待时间 | | 入队 | add(e) | offer(e) | put(

70430

五分钟学编程:怎么学数据结构

本文思维导图 [image] 为什么要学数据结构 了解了基本概念之后,接下来我们再来看看,为什么我们要学习数据结构呢? 在许多类型程序设计中,数据结构选择是一个基本设计考虑因素。...这种洞见导致了许多种软件设计方法和程序设计语言出现,面向对象程序设计语言就是其中之一。...强化学习阶段 完成了第一波视频+书籍学习之后,我们应该已经对数据结构有了初步了解了,对一些简单数据结构算法也应该有所了解了,比如栈入栈和栈,队列,二叉树先序遍历和后续遍历、层次遍历...对于考卷上一些知识点,觉得掌握并不是很好,于是又买了《王道数据结构》以及一些并没有什么卵书回来看,再次强化了基础。...除了在纸上写之外,更好办法自然是在电脑上敲了,写Java使用Java写,写C++ C++ 写,总之用自己擅长语言实现就好,尴尬当时只会c,所以就只好老老实实地devc++写简单c语言程序了

45900

奉劝那些刚参加工作学弟学妹们:要想学好并发编程,这些并发容器坑是你必须要注意!!(建议收藏)「建议收藏」

非阻塞队列:队列入队和操作不会阻塞。 单端队列:队列入队操作只能在尾进行,队列操作只能在首进行。 双端队列:队列入队操作和操作都可以在首和尾进行。...也可以在内部不存在队列,例如SynchronousQueue,SynchronousQueue实现了生产者入队操作必须等待消费者操作完成之后才能进行。...(建议收藏)》 《多线程进一步优化了亿级流量电商业务下海量数据校对系统,性能再次提升了200%!!...(全程干货,建议收藏)》 《多线程优化了亿级流量电商业务下海量数据校对系统,性能直接提升了200%!!(全程干货,建议收藏)》 《10张图总结出了这份并发编程最佳学习路线!!...(建议收藏)》 《三天时间开发了一款老少皆宜国民级游戏,支持播放音乐,现开放完整源代码和注释(建议收藏)!!》 《是全网最硬核高并发编程作者,CSDN最值得关注博主,大家同意吗?

58730

电子教程: 渗透测试实战第三版(红版)开源发布

对每一个句子,只有自己让是可以读懂才会贴上来。 因为中文和英文的确存在差异,并非每一句英文意思都可以中文完全表达同样意思,不可避免存在些个翻译出来比较奇怪词语。...关于【译者注】:思故我惑。书里也有很多读不懂、不太理解知识盲区。读时候我会查找相关资料,但是就会想,为什么不把找到觉得不错资料分享给读者呢?这就是翻译中那些【译者注】由来。...觉得你可以参考这篇来建:适用于渗透测试不同阶段工具收集整理 本书毕竟是一本外语书,有的工具不适合国内环境。大家自行取舍。...而随着新技术发展、不断地趋于大和复杂,一些曾经出现过漏洞又会出现。传统攻击方法会迸发出新生机。 这大概就是我们阅读此类书目的吧。...从本书中作者循循善诱中学到了很多,作者不仅逐步深入,还会跟我们讲为什么编程能力对安全人员很重要、为什么我们需要理解底层......相信如果你认真读了,你会跟我一样收获颇多。

1.9K20
领券