概述

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. 对接快递100&聚水潭API

    对接快递100&聚水潭API 入我相思门,知我相思苦. 简介:对接第三方平台快递100&聚水潭API的简要总结. 1.感悟 个人感觉快递100的API更友好一些,比如有SDK可以调用: ...

  2. Redis实战篇(二)基于Bitmap实现用户签到功能

    很多应用上都有用户签到的功能,尤其是配合积分系统一起使用.现在有以下需求: 签到1天得1积分,连续签到2天得2积分,3天得3积分,3天以上均得3积分等. 如果连续签到中断,则重置计数,每月重置计数. ...

  3. 全网最详细的Linux命令系列-Find命令

    Find工具实战 Find工具实战,Find工具主要用于操作系统文件.目录的查找,其语法参数格式为: find path -option [ -print ] [ -exec -ok command ...

  4. SVN讲解

    1.SVN是什么? 代码版本管理工具 它能记住你每次的修改 查看所有的修改记录 恢复到任何历史版本 恢复到已经删除的文件 2.SVN和Git相比,有什么优势? 使用简单,上手快 git没有目录级权限控 ...

  5. 轻松理解 Spring AOP

    目录 Spring AOP 简介 Spring AOP 的基本概念 面向切面编程 AOP 的目的 AOP 术语和流程 术语 流程 五大通知执行顺序 例子 图例 实际的代码 使用 Spring AOP ...

  6. oo第四单元作业总结暨课程总结

    oo第四单元作业总结暨课程总结 一.本单元作业架构设计 本单元需要构建一个UML解析器,通过对输入的UML类图/顺序图/状态图的相关信息进行解析以供查询,其中课程组已提供输入整体架构及输入解析部分,仅 ...

  7. python基础(补充):列表生成器

    列表推导式是Python构建列表(list)的一种快捷方式,可以使用简洁的代码就创建出一个列表. 举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list ...

  8. 集合Set添加多个元素

    方一 Integer[] x=new Integer[]{4,6,9,10}; Set<Integer> set = new HashSet<>() ; Collections ...

  9. 10276 - Hanoi Tower Troubles Again!(思维,模拟)

    People stopped moving discs from peg to peg after they know the number of steps needed to complete t ...

  10. win10 添加全局快捷键

    前言 好久没写博客了,今天水一下 如何在win10 下添加一个全局唤醒的快捷键(打开截图软件) 步骤 win + Q 输入 管理工具 添加快捷方式 这里没有管理员权限,可以直接把创建好的 快捷方式 粘 ...