概述

Java所有集合类都在java.util包下,支持并发的集合在java.util.concurrent(juc)包下。

集合与数组区别:

  1. 数组大小是固定的,集合大小可以根据使用情况进行动态扩容。
  2. 数组可以存放基本数据类型,集合只能存放引用数据类型。

Java中集合分为单列集合(实现Collection接口)和双列集合(实现Map接口)两种形式,常用集合框架图如下图所示:

Map集合

  常用实现类有HashMap,HashTable,LinkedHashMap。

  • HashMap

  HashMap底层原理实现请参考:。

  1. 底层是基于数组和链表/红黑树实现的(jdk8采用的红黑树结构)。
  2. HashMap的key可以为null(因为key是不重复的所以只会仅存在一个),value可以存在多个null值。
  3. HashMap是线程不安全的。
  • HashTable

  1. 底层数据和HashMap是一样的。
  2. HashTable的key和value都不允许为null。
  3. HashTable是线程安全的。
  • LinkedHashMap

  1. LinkedHashMap 继承 HashMap,底层数据结构较HashMap多了一个双循环链表。
  2. LinkedHashMap 是有序。
  3. LinkedHashMap 的key可以为null(因为key是不重复的所以只会仅存在一个),value可以存在多个null值。
  4. LinkedHashMap 是线程不安全的。
  • ConcurrentHashMap

  1. ConcurrentHashMap是线程安全的,性能比HashTable好。

List集合

  常用实现类有ArrayList,LinkedList。

  • ArrayList

  1. ArrayList底层是基于数组实现的,查询快,增删慢。
  2. ArrayList是线程不安全的,效率高。
  • LinkedList

  1. LinkedList是基于链表实现的,查询慢,增删快。
  2. LinkedList是线程不安全的,效率高。
  • Vector

  1. Vector底层是基于数组实现的,查询快,增删慢。
  2. Vector是线程安全的,效率低(很少使用,面试有时候会问到)。

Set集合

  常用实现类有HashSet,TreeSet,LinkedHashSet。

  • HashSet

  1. HashSet是无序的(底层是根据hash算法进行排序的,对于我们来说它不能按照插入顺序或者数据大小进行排序,所以我们称为无序)。
  2. HashSet元素可以为null。
  3. HashSet是线程不安全的。
  • LinkedHashSet

  1. LinkedHashSet底层是基于链表和hash表实现的。
  2. LinkedHashSet是有序的。
  3. LinkedHashSet元素可以为null。
  4. LinkedHashSet是线程不安全的。
  • TreeSet

  1. TreeSet实现了SortedSet接口,采用的是红黑树算法进行排序的。
  2. TreeSet是有序的。
  3. TreeSet元素不能为null。
  4. TreeSet是线程不安全的,

Queue队列

  Queue是Java1.5开始引入的。常用实现类有ArrayQueue。

Java集合详解(一):全面理解Java集合的更多相关文章

  1. Java 集合详解 | 一篇文章解决Java 三大集合

    更好阅读体验:Java 集合详解 | 一篇文章搞定Java 三大集合 好看的皮囊像是一个个容器,有趣的灵魂像是容器里的数据.接下来讲解Java集合数据容器. 文章篇幅有点长,还请耐心阅读.如只是为了解 ...

  2. Java基础详解 (一)Java的类成员访问权限修饰词(以及类访问权限)

    在一个类的内部,其成员(包括成员变量和成员函数)能否被其他类所访问,取决于该成员的修饰词.Java的类成员访问权限修饰词有四类:private,无(默认情况下),protected和public.其权 ...

  3. Java泛型详解(转)

    文章转自  importNew:Java 泛型详解 引言 泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用.本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理 ...

  4. Java ClassLoad详解

    Java ClassLoad详解 类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK 1. ...

  5. Java内部类详解(一)

    (转自:http://blog.csdn.net/wangpeng047/article/details/12344593) 很多人对于Java内部类(Inner Class)都十分陌生,甚至听都没听 ...

  6. 集合详解之 Map

    集合详解之 Map + 面试题 集合有两个大接口:Collection 和 Map,本文重点来讲解集合中另一个常用的集合类型 Map. 以下是 Map 的继承关系图: Map 简介 Map 常用的实现 ...

  7. Java Annotation详解 理解和使用Annotation

    系统中用到了java注解: 查了一下如何使用注解,到底注解是什么: (1)创建方法:MsgTrace Java Class==> 在Create New Class中: name:输入MsgTr ...

  8. Java集合详解6:TreeMap和红黑树

    Java集合详解6:TreeMap和红黑树 初识TreeMap 之前的文章讲解了两种Map,分别是HashMap与LinkedHashMap,它们保证了以O(1)的时间复杂度进行增.删.改.查,从存储 ...

  9. Java集合详解3:Iterator,fail-fast机制与比较器

    Java集合详解3:Iterator,fail-fast机制与比较器 今天我们来探索一下LIterator,fail-fast机制与比较器的源码. 具体代码在我的GitHub中可以找到 https:/ ...

  10. Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

随机推荐

  1. 【安全研究】Domain fronting域名前置网络攻击技术

    出品|MS08067实验室(www.ms08067.com) 千里百科 Domain Fronting基于HTTPS通用规避技术,也被称为域前端网络攻击技术.这是一种用来隐藏Metasploit,Co ...

  2. [源码解析] 并行分布式框架 Celery 之架构 (1)

    [源码解析] 并行分布式框架 Celery 之架构 (1) 目录 [源码解析] 并行分布式框架 Celery 之架构 (1) 0x00 摘要 0x01 Celery 简介 1.1 什么是 Celery ...

  3. 【python小示例】简易彩票中奖模拟

    咱自己写个彩票程序,成功亏掉3个亿 今天突发奇想,自己设计一个小程序,模拟彩票中奖,看看如果自己有个彩票公司,能挣钱吗?代码如下: # -*- utf-8 -*- """ ...

  4. 使用sysbench测试mysql及postgresql(完整版)

    使用sysbench测试mysql及postgresql(完整版) 转载请注明出处https://www.cnblogs.com/funnyzpc/p/14592166.html 前言 使用sysbe ...

  5. 第20 章 : GPU 管理和 Device Plugin 工作机制

    GPU 管理和 Device Plugin 工作机制 本文将主要分享以下几个方面的内容: 需求来源 GPU 的容器化 Kubernetes 的 GPU 管理 工作原理 课后思考与实践 需求来源 201 ...

  6. C#中SQLite的使用及工具类

    目录 SQLite简介 存储类 亲和类型 引用System.Data.SQLite.dll 软件包分类 使用本机库预加载 常用部署包 工具类 参考资料 SQLite简介 SQLite是一款轻型的数据库 ...

  7. ret2dl64

    ret2dl64 ret2dl64 与ret2dl32不同,ret2dl64需要知道libc. 检查保护: IDA看一看 read_got 被置为0,强制你使用ret2dlresolve. 我们先伪造 ...

  8. Spring Boot 2.x 快速集成Kafka

    1 Kafka Kafka是一个开源分布式的流处理平台,一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据.Kafka由Scala和Java编写,2012年成为Apache ...

  9. 5. Mybatis UPDATE更新,DELETE删除

    案例: 1. update <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper ...

  10. Go之Zap日志库集成Gin

    简介 在许多Go语言项目中,我们需要一个好的日志记录器能够提供下面这些功能: 1 . 能够将事件记录到文件中,而不是应用程序控制台; 2 . 日志切割-能够根据文件大小.时间或间隔等来切割日志文件; ...