本文源码:GitHub·点这里 || GitEE·点这里

一、集合容器简介

集合容器是Java开发中最基础API模块,通常用来存储运行时动态创建的元素,基本特点如下:

  • 泛型特点,存储任意类型对象;
  • 动态扩容,存储任意数量对象;

这里对存储数量是受到程序和内存等环境制约的,从List的get()方法中可以看出,index的范围是Integer.MAX_VALUE。

二、API体系

三大核心接口:List、Set继承Collection, Map独立接口

List与Set体系

List体系核心API:ArrayList,LinkedList、Vector

Set体系核心API:HashSet、TreeSet、LinkedHashSet

Queue队列API:PriorityQueue、LinkedHashSet

Map体系

Map体系核心API:HashMap、LinkedHashMap、TreeMap、Hashtable

三、基础容器详解

1、核心内容

  • 元素存储,增删改查判断等基础用法
  • API方法中线程安全问题
  • 容器初始化大小与动态扩容机制
  • 底层数据结构特点
  • 同一接口或者不同接口体系容器对比

基本熟练使用并理解集合容器,需要知道如上几块内容:API基础用法,线程安全问题;容器大小与扩容;结构特点,数组、链表、哈希表;

2、API体系详解

Collection:集合容器的根接口,定义公共方法;

List体系

  • ArrayList

维护Object数组实现,特点:查询快,增删慢,非线程安全,所以效率高。

  • LinkedList

底层维护链表数据结构实现,特点:查询慢,增删快,非线程安全,所以效率高。

  • Vector

底部维护Object数组,实现和ArrayList一样,但是Vector是线程安全,效率低。

Set体系

  • HashSet

底层是使用了哈希表来支持的,特点:存取速度快,元素唯一且无序。

  • LinkedHashSet

底层数据结构是链表和哈希表,链表保证元素有序性,哈希表保证元素唯一性,非线程安全。

  • TreeSet

数据结构是红黑树,如果元素具备自然顺序的特性,那么就按照元素自然顺序的特性进行排序,或者基于比较器自定义排序。

Map体系:

Map接口的实现类,具备的特点:存储的数据都是以键值对的方式,键不可以重复,值可重复。

  • HashMap

底层使用hashCode表来实现向HashMap中添加元素,允许使用null值和null键,不保证元素的顺序固定。

  • TreeMap

TreeMap:基于二叉树的数据结构实现的,会对具备自然特性的键进行排序存储:元素的键具备自然特性,直接排序存储;不具备自然特性,实现Comparable接口,在ComparaTo中定义排序规则。

  • HashTable

线程安全,相对效率低,不允许使用null值。

3、容器遍历

  • 基于for、foreach、while流程控制
  • Iterable迭代器核心接口
  • Lambda表达式:遍历、分组、查询

四、源代码地址

GitHub·地址
https://github.com/cicadasmile
GitEE·地址
https://gitee.com/cicadasmile

推荐阅读:架构设计系列

标题
架构设计:单服务.集群.分布式,基本区别和联系
架构设计:分布式业务系统中,全局ID生成策略
架构设计:分布式系统调度,Zookeeper集群化管理
架构设计:接口幂等性原则,防重复提交Token管理
架构设计:缓存管理模式,监控和内存回收策略
架构设计:异步处理流程,多种实现模式详解
架构设计:高并发流量削峰,共享资源加锁机制
架构设计:分布式服务,库表拆分模式详解
架构设计:分布式事务①概念简介和基础理论
架构设计:基于电商交易流程,图解TCC事务分段提交
架构设计:基于消息中间件,图解柔性事务一致性

编程体系结构(03):Java集合容器的更多相关文章

  1. 面霸篇:Java 集合容器大满贯(卷二)

    面霸篇,从面试角度作为切入点提升大家的 Java 内功,所谓根基不牢,地动山摇. 码哥在 <Redis 系列>的开篇 Redis 为什么这么快中说过:学习一个技术,通常只接触了零散的技术点 ...

  2. Java集合容器简介

    Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...

  3. [转载]Java集合容器简介

    Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...

  4. Java并发编程系列-(5) Java并发容器

    5 并发容器 5.1 Hashtable.HashMap.TreeMap.HashSet.LinkedHashMap 在介绍并发容器之前,先分析下普通的容器,以及相应的实现,方便后续的对比. Hash ...

  5. Java——(二)Java集合容器

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.基本概念 1)Collection:一个独立元素的序列,这些元素都服从一条或多条规则.Lis ...

  6. Java集合容器的深度理解

    Java容器里有很多写好的容器API,这使我们很方便的可以存储.操作我们的数据. 下面是我写的容器的特点,一些容器的不同之处,从底层源码解析一下容器实现原理 一.常用的容器目录 上图可以看出,java ...

  7. JAVA并发编程的艺术 Java并发容器和框架

    ConcurrentHashMap ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成. 一个ConcurrentHashMap里包含一个Segment数组, ...

  8. JAVA编程学习之JAVA集合

    一.JAVA集合类 为了保存数量不确定的数据,以及保存具有映射关系的数据(关联数组),java提供了集合类.所有集合类位于java.util包下. 集合类就像容是器,现实生活中容器的功能,无非就是添加 ...

  9. 【转载】Java集合容器全面分析

    转自:http://blog.csdn.net/garfielder007/article/details/52143803 简介: 集合类Collection不是Java的核心类,是Java的扩展类 ...

随机推荐

  1. C#LeetCode刷题之#559-N叉树的最大深度​​​​​​​(Maximum Depth of N-ary Tree)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4088 访问. 给定一个 N 叉树,找到其最大深度. 最大深度是指 ...

  2. JS实现call,apply,bind函数

    实现之前的预备知识 ...用作展开 ...用作剩余参数 Object.create()的作用 原型链与构造函数 这些有时间补上吧 call函数实现 Function.prototype.myCall ...

  3. hdfs学习(二)

    一.HDFS文件限额配置 在多人共用HDFS的环境下,配置设置非常重要.特别是在Hadoop处理大量资料的环境,如果没有配额管理,很容易把所有的空间用完造成别人无法存取.Hdfs的配额设定是针对目录而 ...

  4. 浏览器自动化的一些体会7 selenium webdriver的一些问题

    1. 下载图片 这个链接说得最好,差不多所有可能的方法都列举了,除了没有提到用URLDownloadToFile,不过这和用WebClient差不多. https://stackoverflow.co ...

  5. JavaScript 用七种方式教你判断一个变量是否为数组类型

    JavaScript 如何判断一个变量是否为数组类型 引言 正文 方法一 方法二 方法三 方法四 方法五 方法六 方法七 结束语 引言 我们如何判断一个变量是否为数组类型呢? 今天来给大家介绍七种方式 ...

  6. install-newton部署安装--------计算节点部署安装

    #################################################################################################### ...

  7. Jenkins(1)—— 部署安装

    最近有聊到接口自动化,持续集成这方面,所以想从持续集成工具Jenkins作为切入点来学习一下 一.jenkins概念 Jenkins是一个开源的.可扩展的持续集成.交付.部署(软件/代码的编译.打包. ...

  8. 谱聚类的python实现

    什么是谱聚类? 就是找到一个合适的切割点将图进行切割,核心思想就是: 使得切割的边的权重和最小,对于无向图而言就是切割的边数最少,如上所示.但是,切割的时候可能会存在局部最优,有以下两种方法: (1) ...

  9. Vue的数据响应式

    getter和setter怎么用 示例代码 getter ,关键词为 get ,用于获取一个值.定义时为函数,但是使用时不用加括号. setter 用于对数据的改写 Object.defineProp ...

  10. GA教程:使用自定义变量来扩展高级细分

    http://www.wocaoseo.com/thread-64-1-1.html 您可以使用自定义变量来扩展高级细分的范围. 高级细分依据的标准是用户的会话(访问)数据.如果某个访问者在指定日期范 ...