记录一下集合的内容,以便需要查看的时候不需要翻开书本;

集合按照其存储结构可以分为两大类,即单列集合Collection和双列集合Map,这两种集合的特点具体如下。
. Collection: 单列集合类的根接口,用于存储一 系列符合某种规则的元素,它有两个重要的子接口,分别是List和Set。其中,List 的特点是元素有序、元素可重复。Set的特点是元素无序并且不可重复。List 接口的主要实现类有ArrayList和LinkedList,Set接口的主要实现类有HashSet和TreeSet.
. Map:双列集合类的根接口,用于存储具有键(Key)、值(Value)映射关系的元素,每个元素都包含对键值,在使用Map集合时可以通过指定的Key找到对应的Value,例如根据-个学生 的学号就可以找到对应的学生。Map接口的主要实现类有HashMap和TreeMap

下面来用一张图描述整个集合类的继承关系

其中虚线的代表接口,实线的是具体的实现类

List:

List接口继承自Collection接口,特点是集合中允许出现重复的元素,所有元素是以一中线性的方式进行存储的,可以通过索引来访问集合中的指定元素,另外的一个特点是元素是有序的,即元素的存入顺序和取出顺序的一致;

ArrayList:

ArrayList是List的一个实现类,继承List的所有特点,在ArrayList的内部封装了一个长度可变的数组对象,当存人的元素超过数组长度时, ArrayList会在内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList 集合看作一个长度可变的数组。          由于ArrayList集合的底层是使用一个数组来保存元素,在增加或删除指定位置的元素时,会导致创建新的数组,效率比较低,因此不适合做大量的增删操作。但这种数的结构允许程序通过索引的方式来访问元素,因此使用ArayList集合直找元素很便调

LinkedList:

前面提到ArrayList集合在查询元素时速度很快,但在增划无素时效率较低,为了克服这种局限性,可以使用List接口的另一个实现类LinkedList. 该集合内部维护了一个双向循环链表,链表中的每一一个元素都使用引用的方式来记住它的前一个元素和后一个元素,从而可以将所有的元素彼此连接起来。当插人一个新元素时,只需要修改元素之间的这种引用关系即可,删除一个节点也是如此。正因为这样的存储结构,所以LinkedList集合对于元素的增删操作具有很高的效率,LinkedList集合添加元素和删除元素的过程如下图所示:

集合两大类:
1.Collection(单列集合)
2.Map(双列集合)

Collection(接口):单列集合
1.List(接口):元素按进入先后顺序保存,可重复
LinkedList(实现类):双向循环链表,没有同步, 线程不安全
ArrayList(实现类):数组:初始长度10,没有同步, 线程不安全
Vector(实现类):类似ArrayList,同步, 线程安全

2.Set(接口):仅接收一次,不可重复,并做内部排序 
HashSet(实现类):使用hash表(数组)存储元素 (首先会调用存入对象的hashCode()来确定元素的存储位置,在调用equals()来确保该位置没有重复的元素,对于自定义的类需重写hashCode()和equals()方法。
TreeSet(实现类):内部采用平衡的排序二叉树来存储元素(小的在左边,大的在右边),既可以保证没有重复的元素,也可以对元素进行排序。需要继承Comparable接实现comparaTo()方法。

Map(接口):双列集合,键-值
HashMap(实现类):不能有重复键,没有同步, 线程不安全
Properties:(HashMap的子类):
Hashtable(实现类):类似HashMap,但 同步, 线程安全 ,但速度较慢
TreeMap (实现类):红黑树对所有的key进行排序

工具类:

Collections:提供了一系列的静态方法对List集合进行操作:反转,添加元素,随机排序,元素位置交换等;

java集合类的学习及详解相关推荐

  1. Java开发手册学习与详解-实习第1,2天

    一:命名风格 1,代码中变量的命名要避免使用中文,以及中英文混用.对于国际通用·的拼音组词可以直接使用,但是其他的拼音组词是禁止使用的. 2.类名:命名尽量使用UpperCamelCase的格式,DO ...

  2. Java JUC学习 - ConcurrentLinkedDeque 详解

    Java JUC学习 - ConcurrentLinkedDeque 详解 0x00 前言 如何实现并发程序,对于Java以及其他高级语言来说都是一件并不容易的事情.在大一上学期的时候,我们学习了链表 ...

  3. 【Java SE】封装的详解

    篮球哥温馨提示:编程的同时不要忘记锻炼哦! 因为热爱,所以编程 目录 1.封装 1.1 什么是封装? 2.2 访问权限 2.3 private 简单使用 2.封装之包的概念 2.1 什么是包? 2.2 ...

  4. Java 1.8 函数式编程详解

    Java 1.8 函数式编程详解 文章目录 Java 1.8 函数式编程详解 一. 概述 1.1 java 8 新特性: 二. 函数式接口 2.1 函数式接口概述 2.2 Lambda表达式概述 2. ...

  5. Java中的main()方法详解

    源文作者:leizhimin    源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...

  6. [java] 虚拟机(JVM)底层结构详解[转]

    [java] 虚拟机(JVM)底层结构详解[转] 本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 在以前的博客里面,我们介绍了在java领 ...

  7. (best!)JAVA中文字符编码问题详解

    转载自:http://blog.csdn.net/youyue/article/details/4580402 JAVA中文字符编码问题详解 JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应 ...

  8. Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3

    Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3 总览 问题 详解 String.intern()的作用 link LeetCode的Two Sum题 ...

  9. java基础与案例开发详解 pdf下载_Java基础与案例开发详解(张孝祥) pdf_IT教程网...

    资源名称:Java基础与案例开发详解(张孝祥) pdf 第1.2和3章介绍Java环境的安装配置,Java程序的开发过程和Java语言的基础语法. 第4章介绍数组和常用算法的相关知识. 第5章和6章介 ...

最新文章

  1. 芯片初创公司一亿融资可以烧多久
  2. LeetCode 141. Linked List Cycle--面试编程题--C++,Python解法
  3. msys2 安装注意事项
  4. 疯狂ios讲义疯狂连载之实现游戏视图控制器
  5. ngzorro html源码,Angular 中 ngTemplateOutlet 的用法以及ng-zorro源码分析!
  6. (十七)WebGIS中距离及面积测量的原理和实现以及坐标转换的简单介绍
  7. 日语学习-多邻国-平假名3
  8. 遵化计算机培训,遵化人力资源培训
  9. LeetCode 12. Integer to Roman
  10. adb interface找不到驱动程序_Windows 10现支持更多设备的驱动程序更新
  11. 稳定不掉线,翀旭用飞鱼星解决高密Wi-Fi接入
  12. 解决谷歌浏览器最新版本CORS跨域问题
  13. 联想Lenovo Legion Y9000X 2020 外接扩展屏不显示画面
  14. Chapter Four : Python 序列之列表、元组操作详解合集
  15. ruoyi增加导入导出
  16. 使用 Cobertura 和反射机制提高 Java 单元测试中的代码覆盖率
  17. C语言--不使用库函数,利用指针编写一个计算字符串长度的程序
  18. nginx做反向代理和后端web服务器之间的交互
  19. 如何给SolidWorks工程图添加条型码?
  20. 内存压力测试 memtester移植到STM32

热门文章

  1. python用动态规划求最短路径_动态规划之最短路径问题详解
  2. android 抛物线轨迹,Android自定义View——贝塞尔曲线实现抛物线效果
  3. 七、节能篇:多种节能降耗技术并用,超频也无忧!
  4. 2018年6月1日 | 周五 | 区块链早报
  5. 无处可逃:罗兴亚人的困境恶化 | 经济学人早报精选20210826
  6. Dex.top(大力士)关于上线Limo公告
  7. Horizon Client 配置设置和命令行选项
  8. 遗传算法在走迷宫游戏中的应用
  9. iOS开发核心动画之Quartz2D绘图
  10. mysql截取数字_mysql 截取字符串中的数字