java 集合总结

一、集合类型

(1)集合

List  Queue Set  Map

List  Queue Set 实现Collection接口

(2)Collections工具类

reverse(List list):反转

shuffle(List list),随机排序

sort(List list, Comparator c);定制排序,由Comparator控制排序逻辑

swap(List list, int i , int j),交换两个索引位置的元素

rotate((List list, int distance),旋转

binarySearch(List list, Object key), 对List进行二分查找,返回索引,注意List必须是有序的

max(Collection coll, Comparator c),根据定制排序,返回最大元素,排序规则由Comparatator类控制。类比int min(Collection coll, Comparator c)

fill(List list, Object obj),用元素obj填充list中所有元素

frequency(Collection c, Object o),统计元素出现次数

indexOfSubList(List list, List target), 统计targe在list中第一次出现的索引,找不到则返回-1,类比int lastIndexOfSubList(List source, list target).

boolean replaceAll(List list, Object oldVal, Object newVal), 用新元素替换旧元素

emptyXXX(),返回一个空的只读集合(这不知用意何在?)

singleXXX(),返回一个只包含指定对象,只有一个元素,只读的集合。

unmodifiablleXXX(),返回指定集合对象的只读视图。

synchronizedXXX()等方法,来将集合包装成线程安全的集合

二、List 

List 存储方式初始容量容量增长同步方式
ArrayList数组空数组,10oldSize + oldSize/2
Vector数组10,增量为0oldSize + oldSizesynchronized
LinkedList

jdk6带头结点的双向循环链表

jdk7不带头结点的双向链表,增加两个节点指针first、last指向首尾节点

CopyOnWriteArrayList数组0ReentrantLock

三、Queue

(1)offer,add 区别:

一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。

这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。

(2)poll,remove 区别:

remove() 和 poll() 方法都是从队列中删除第一个元素。remove() 的行为与 Collection 接口的版本相似, 但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此新的方法更适合容易出现异常条件的情况。

(3)peek,element区别:

element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null。

Queue存储方式初始容量容量增长同步方式
PriorityQueue数组,comparator11oldCapacity + ((oldCapacity < 64) ?  
(oldCapacity + 2) : (oldCapacity >> 1))
ConcurrentLinkedQueue链表

CAS
DelayQueuePriorityQueueReentrantLock Condition
ArrayBlockingQueue数组,是否fairReentrantLock、Empty和Full Condition
LinkedBlockingQueue链表take和put ReentrantLock、Empty和Full  Condition
LinkedTransferQueue链表LockSupport
PriorityBlockingQueue数组oldCap + ((oldCap < 64) ?
 (oldCap + 2) :  (oldCap >> 1))
ReentrantLock、Condition
SynchronousQueue TransferQueue,TransferStack,是否fairCAS

 Deque继承Queue

Deque存储方式初始容量容量增长同步方式
LinkedList

链表

ArrayDeque数组8n << 1
ConcurrentLinkedDeque链表CAS
LinkedBlockingDeque链表Integer.MAX_VALUEReentrantLock、Empty和Full Condition

四、Map

Map存储方式初始容量容量增长同步方式特性
HashMap

 jdk7 entry数组 + 链表

jdk8 Node数组 + 链表/红黑树

16table.size*2key、value可空
Hashtable数组11table.size*2 + 1 synchronizedkey、value不可空
LinkedHashMap链表记录添加顺序
TreeMap红黑树,comparator默认key不可空,排序 
EnumMapkey数组 value数组 enum.ordinal下标key不可空  value为空使用NULLObject填充
ConcurrentHashMap

JDK7:Segment数组 + HashEntry数组 + 链表

JDK8:Node数组 + 链表 + 红黑树 

分段锁 ReentranLock、

synchronized和CAS

key、value不可空
ConcurrentSkipListMap跳跃链表key、value不可空

五、Set

Set存储方式
HashSetHashMap
LinkedHashSetLinkedHashMap
TreeSetTreeMap
ConcurrentSkipListSetConcurrentSkipListMap
CopyOnWriteArraySetCopyOnWriteArrayList

六、常见题目

(1)说说List,Set,Map三者的区别
(2)Arraylist 与 LinkedList 区别
RandomAccess接口、双向链表和双向循环链表
(3)ArrayList 与 Vector 区别呢?为什么要用Arraylist取代Vector呢
(4)说一说 ArrayList 的扩容机制吧
(5)HashMap 和 Hashtable 的区别
(6)HashMap 和 HashSet区别
(7)HashSet如何检查重复
(8)HashMap的底层实现
JDK1.8之前
JDK1.8之后
(9)HashMap 的长度为什么是2的幂次方
(10)HashMap 多线程操作导致死循环问题
(11)ConcurrentHashMap 和 Hashtable 的区别
(12)ConcurrentHashMap线程安全的具体实现方式/底层具体实现
JDK1.7、JDK1.8 
(13)comparable 和 Comparator的区别
Comparator定制排序、重写compareTo方法实现排序
(14)集合框架底层数据结构总结
Collection
1. List
2. Set
Map

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jzoj6316-djq的朋友圈【状压dp】

正题 题目大意 有盟友和情敌关系&#xff0c;情敌的情敌是朋友之类的规则&#xff0c;然后如果一个人和111的关系已经确定&#xff0c;以后都不会有任何影响&#xff0c;然后求一个序列&#xff0c;要求111的盟友最大。 解题思路 定义与111直接连边的是AAA类点&#xff0c;不…

.Net 4.X 提前用上 .Net Core 的配置模式以及热重载配置

1. 前言在提倡微服务及 Serverless 越来越普及的当下&#xff0c;传统 .Net 应用的配置模式往往依赖于一个名为 web.config 的 XML 文件&#xff0c;在可扩展性和可读性与时代脱节了。当然&#xff0c;我不会怂恿一下子把所有应用迁移到 .Net Core 上&#xff0c;本文将在尽量不…

P4764-[CERC2014]Pork barrel【主席树,LCT,最小生成树】

正题 题目链接:https://www.luogu.org/problem/P4764 题目大意 给出一张图&#xff0c;若干个询问&#xff0c;每个询问求只使用权值在[L,R][L,R][L,R]这个范围内的边组成的最小生成树权值和&#xff0c;强制在线。 解题思路 我们先考虑LLL固定&#xff0c;这时我们发现我们…

C# 枚举特性 FlagAttribute 的应用

写在前面枚举Enum 全称(Enumeration)&#xff0c;即一种由一组称为枚举数列表的命名常量组成的独特类型。可以看出枚举的出现是为了使我们可以在程序中方便的使用一些特定值的常量&#xff0c;一般的使用大家都比较熟悉&#xff0c;本文主要介绍枚举的特性 FlagAttribute。Flag…

jzoj2908,P1527-[集训队互测 2012]矩阵乘法【整体二分,二维树状数组】

正题 题目链接:https://www.luogu.org/problem/P1527 题目大意 给出一个矩阵&#xff0c;每个询问求子矩阵中的第kkk小数。 解题思路 我们发现我们对于每个询问我们可以二分答案&#xff0c;然后查找该子矩阵中有多少个数≤mid\leq mid≤mid来判断。 但是这样时间复杂度和空…

重温.NET下Assembly的加载过程

最近在工作中牵涉到了.NET下的一个古老的问题&#xff1a;Assembly的加载过程。虽然网上有很多文章介绍这部分内容&#xff0c;很多文章也是很久以前就已经出现了&#xff0c;但阅读之后发现&#xff0c;并没能解决我的问题&#xff0c;有些点写的不是特别详细&#xff0c;让人…

jzoj3410-[GDOI2014模拟]Tree【最小生成树,贪心】

正题 题目大意 在一张图中选择一颗生成树使得边权的方差最小。 解题思路 我们很容易想到一种贪心&#xff0c;那就是在按照边权排好序后选择一段连续的区间然后使用这段区间构成最小生成树&#xff0c;这样时间复杂度是O(m3log⁡m)O(m^3\log m)O(m3logm)&#xff0c;时间复杂…

看eShopOnContainers学一个EventBus

最近在看微软eShopOnContainers 项目&#xff0c;看到事件总线觉得不错&#xff0c;和大家分享一下看完此文你将获得什么&#xff1f;eShop中是如何设计事件总线的实现一个InMemory事件总线eShop中是没有InMemory实现的&#xff0c;这算是一个小小小的挑战发布订阅模式发布订阅…

jzoj3682-Points and Segments【模型转化,欧拉回路】

正题 题目大意 给出若干个区间&#xff0c;然后给每个区间涂颜色(蓝或红)&#xff0c;求一种方案使得每个点的颜色数量差不超过111。 解题思路 我们可以从每个lll向rrr连一条双向边&#xff0c;若此时我们可以跑出欧拉回路&#xff0c;那么这就满足颜色差为0(从l∼rl\sim rl∼…

常用解题算法总结

一、四大基本算法 分治法 动态规划&#xff08;一次买卖股票、多次买卖股票、最大连续子序列和、最大连续子序列积、最长公共子序列&#xff09; 贪心算法 穷举法 二、常用便捷算法 异或法&#xff08;单次偶次数、顺序单次偶次数&#xff09; 位运算&#xff08;单次k次…

创建基于MailKit和MimeKit的.NET基础邮件服务

邮件服务是一般的系统都会拥有和需要的功能&#xff0c;但是对于.NET项目来说&#xff0c;邮件服务的创建和使用会较为的麻烦。.NET对于邮件功能提供了System.Net.Mail用于创建邮件服务&#xff0c;该基础服务提供邮件的基础操作&#xff0c;并且使用也较为的简单。对于真正将该…

欢乐纪中A组赛【2019.8.23】

前言 我好菜 成绩 %%%TRXdalao\%\%\% TRXdalao%%%TRXdalao RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC888(H−2)TRX(H-2)TRX(H−2)TRX120120120202020100100100000121212(H−2)HJW(H-2)HJW(H−2)HJW100100100100100100000000181818(J−3)XXY(J-3)XXY(J−3)XXY80…

Java JVM总结

一、jvm参数 1&#xff09;内存 -Xms -Xmx -Xss -Xloggc:file -Xprof -XX:DisabledExplicitGC -XX:PreBlockSpin -XX:CompileThreshold 2&#xff09;Parallel -XX:SurvivorRatio -XX:PreTenureSizeThreshold -XX:MaxTenuringThreshold -XX:ParallelGCThreads -XX:Us…

EF Core下利用Mysql进行数据存储在并发访问下的数据同步问题

小故事在开始讲这篇文章之前&#xff0c;我们来说一个小故事&#xff0c;纯素虚构&#xff08;真实的存钱逻辑并非如此&#xff09;小刘发工资后&#xff0c;赶忙拿着现金去银行&#xff0c;准备把钱存起来&#xff0c;而与此同时&#xff0c;小刘的老婆刘嫂知道小刘的品性&…

牛客练习赛50-记录

正题 比赛链接:https://ac.nowcoder.com/acm/contest/1080#question 成绩 本届 升高二届 总结 以后还是不要写太多自己不擅长的写法&#xff0c;空间要多检查&#xff0c;不要像个傻逼一样啥都写错。 尽量不要为了省一点空间和时间写一些不舒服的东西&#xff0c;尽量在能…

物联网框架ServerSuperIO在.NetCore实现跨平台的实践路线

正所谓天下大势&#xff0c;不跟风不行。你不跨平台&#xff0c;很low嘛。java说&#xff1a;你们能跨嘛&#xff0c;跨给我看看。C#说&#xff1a;不要强人所难嘛。java说&#xff1a;能部署在云上吗&#xff1f;docker&#xff1f;微服务&#xff1f;C#说&#xff1a;不要强人…

Spring Aop总结

一、什么是AOP 面向方面的编程&#xff08;AOP&#xff09;是一种编程技术&#xff0c;是面向对象编程的补充&#xff0c;它也提供了模块化。 在面向对象编程中&#xff0c;关键的单元是对象&#xff0c;AOP的关键单元是切面&#xff0c;或者说关注点。一些切面可能有集中的代…

P3750-[六省联考2017]分手是祝愿【期望dp】

正题 题目链接:https://www.luogu.org/problem/P3750 题目大意 nnn盏灯和按钮&#xff0c;每次随机选择一个xxx按下后会让xxx的倍数的灯都取反&#xff0c;然后若最少kkk步就可以将所有灯关闭那么直接选择最优策略&#xff0c;求关闭所有灯的期望次数。 解题思路 做期望dpdpd…

使用WebApiClient请求和管理Restful Api

前言本篇文章的内容是WebApiClient应用说明篇&#xff0c;如果你没有了解过WebApiClient&#xff0c;可以先阅读以下相关文章&#xff1a;WebApi client 的面向切面编程我来给.Net设计一款HttpClient.Net45下HttpClient的几个缺陷.net的retrofit--WebApiClient库.net的retrofit…

Spring MVC总结

一、Spring MVC &#xff08;1&#xff09;介绍 Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架。 通过把Model&#xff0c;View&#xff0c;Controller分离&#xff0c;将web层进行职责解耦&#xff0c;把复杂的web应用分成逻辑清晰的几部分&…