Java集合详解(一):全面理解Java集合
概述
Java所有集合类都在java.util包下,支持并发的集合在java.util.concurrent(juc)包下。
集合与数组区别:
- 数组大小是固定的,集合大小可以根据使用情况进行动态扩容。
- 数组可以存放基本数据类型,集合只能存放引用数据类型。
Java中集合分为单列集合(实现Collection接口)和双列集合(实现Map接口)两种形式,常用集合框架图如下图所示:


Map集合
常用实现类有HashMap,HashTable,LinkedHashMap。
HashMap
HashMap底层原理实现请参考:。
- 底层是基于数组和链表/红黑树实现的(jdk8采用的红黑树结构)。
- HashMap的key可以为null(因为key是不重复的所以只会仅存在一个),value可以存在多个null值。
- HashMap是线程不安全的。
HashTable
- 底层数据和HashMap是一样的。
- HashTable的key和value都不允许为null。
- HashTable是线程安全的。
LinkedHashMap
- LinkedHashMap 继承 HashMap,底层数据结构较HashMap多了一个双循环链表。
- LinkedHashMap 是有序。
- LinkedHashMap 的key可以为null(因为key是不重复的所以只会仅存在一个),value可以存在多个null值。
- LinkedHashMap 是线程不安全的。
ConcurrentHashMap
- ConcurrentHashMap是线程安全的,性能比HashTable好。
List集合
常用实现类有ArrayList,LinkedList。
ArrayList
- ArrayList底层是基于数组实现的,查询快,增删慢。
- ArrayList是线程不安全的,效率高。
LinkedList
- LinkedList是基于链表实现的,查询慢,增删快。
- LinkedList是线程不安全的,效率高。
Vector
- Vector底层是基于数组实现的,查询快,增删慢。
- Vector是线程安全的,效率低(很少使用,面试有时候会问到)。
Set集合
常用实现类有HashSet,TreeSet,LinkedHashSet。
HashSet
- HashSet是无序的(底层是根据hash算法进行排序的,对于我们来说它不能按照插入顺序或者数据大小进行排序,所以我们称为无序)。
- HashSet元素可以为null。
- HashSet是线程不安全的。
LinkedHashSet
- LinkedHashSet底层是基于链表和hash表实现的。
- LinkedHashSet是有序的。
- LinkedHashSet元素可以为null。
- LinkedHashSet是线程不安全的。
TreeSet
- TreeSet实现了SortedSet接口,采用的是红黑树算法进行排序的。
- TreeSet是有序的。
- TreeSet元素不能为null。
- TreeSet是线程不安全的,
Queue队列
Queue是Java1.5开始引入的。常用实现类有ArrayQueue。
Java集合详解(一):全面理解Java集合的更多相关文章
- Java 集合详解 | 一篇文章解决Java 三大集合
更好阅读体验:Java 集合详解 | 一篇文章搞定Java 三大集合 好看的皮囊像是一个个容器,有趣的灵魂像是容器里的数据.接下来讲解Java集合数据容器. 文章篇幅有点长,还请耐心阅读.如只是为了解 ...
- Java基础详解 (一)Java的类成员访问权限修饰词(以及类访问权限)
在一个类的内部,其成员(包括成员变量和成员函数)能否被其他类所访问,取决于该成员的修饰词.Java的类成员访问权限修饰词有四类:private,无(默认情况下),protected和public.其权 ...
- Java泛型详解(转)
文章转自 importNew:Java 泛型详解 引言 泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用.本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理 ...
- Java ClassLoad详解
Java ClassLoad详解 类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK 1. ...
- Java内部类详解(一)
(转自:http://blog.csdn.net/wangpeng047/article/details/12344593) 很多人对于Java内部类(Inner Class)都十分陌生,甚至听都没听 ...
- 集合详解之 Map
集合详解之 Map + 面试题 集合有两个大接口:Collection 和 Map,本文重点来讲解集合中另一个常用的集合类型 Map. 以下是 Map 的继承关系图: Map 简介 Map 常用的实现 ...
- Java Annotation详解 理解和使用Annotation
系统中用到了java注解: 查了一下如何使用注解,到底注解是什么: (1)创建方法:MsgTrace Java Class==> 在Create New Class中: name:输入MsgTr ...
- Java集合详解6:TreeMap和红黑树
Java集合详解6:TreeMap和红黑树 初识TreeMap 之前的文章讲解了两种Map,分别是HashMap与LinkedHashMap,它们保证了以O(1)的时间复杂度进行增.删.改.查,从存储 ...
- Java集合详解3:Iterator,fail-fast机制与比较器
Java集合详解3:Iterator,fail-fast机制与比较器 今天我们来探索一下LIterator,fail-fast机制与比较器的源码. 具体代码在我的GitHub中可以找到 https:/ ...
- Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同
<Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...
随机推荐
- HarmonyOS三方件开发指南(14)-Glide组件功能介绍
<HarmonyOS三方件开发指南>系列文章合集 引言 在实际应用开发中,会用到大量图片处理,如:网络图片.本地图片.应用资源.二进制流.Uri对象等,虽然官方提供了PixelMap进行图 ...
- 用jar命令打包war远程部署
最近在看jboss的相关漏洞,用jmx-console进行war远程部署的时候碰到一个jsp转war的问题,研究了半天,记录一下免得搞忘了. 一开始网上是说的直接把jsp文件压缩成zip,再把后缀名改 ...
- Android 在活动中使用 Menu
•前行必备--创建 menu 首先,新建一个项目,选择 Empty Activity 选项,并命名为 Test Menu: 这样 Android Studio 自动为我们新建 MainActivity ...
- Java进阶专题(二十八) Service Mesh初体验
前言 ⽬前,微服务的架构⽅式在企业中得到了极⼤的发展,主要原因是其解决了传统的单体架构中存在的问题.当单体架构拆分成微服务架构就可以⾼枕⽆忧了吗? 显然不是的.微服务架构体系中同样也存在很多的挑战 ...
- 免费开源的客服系统 Linux 服务器环境安装部署过程
最近因为项目需要,要找一款在线客服系统集成在 APP 中使用,而且涉及到生意开单,客服系统必须稳定可靠.另外甲方要求,必须支持 Linux 服务器环境. 我们以 Ubuntu 18.04 为例把安装部 ...
- Sql Server Report Service访问服务页面503解决方法
这个问题可能性比较多,也有多个方案去解决,可以从如下方法里逐个测试 1.打最新的数据库补丁. 2.删除报表服务配置的密钥,重启报表服务. 3.修改报表服务器配置的用户账户为域管理员 4.找到报表服务器 ...
- 如何在 NET 程序万种死法中有效的生成 Dump (上)
一:背景 相信很多人都知道通过 任务管理器 抓取dump,虽然简单粗暴,但无法满足程序的无数种死法,比如: 内存膨胀,程序爆炸 CPU爆高,程序累死 应用无响应,用户气死 意外退出,和人生一样 既然手 ...
- Java后端进阶-网络编程(Netty零拷贝机制)
package com.study.hc.net.netty.demo; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled ...
- Java(279-298)【异常、线程】
1.异常的概念&异常的体系 异常,就是不正常的意思.在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将 受影响.在程序中的意思就是: 异常 :指的是程序在执行过 ...
- Crackme_003
功能: 拿到文件,先执行一下.功能如下: 1.nag窗口 会先出现如下nag窗口,持续几秒 2.注册窗口: 出现错误会提示:You Get Wrong Try Again 破解: 1.查壳: 无壳, ...