Java集合框架

  • Java集合框架基础介绍
  • 集合框架的组成介绍
    • Iterator
    • Collection
      • List接口
      • Set接口
      • Queue接口
    • Map接口
      • HashMap
      • LinkedHashMap
      • TreeMap
      • WeakHashMap
      • HashTable
    • 工具类
      • Collections
      • Arrays

Java集合框架基础介绍

我们都学习过基础的数据结构了,比如说数组、链表等。为什么还需要学集合框架呢?

这其中最重要的一点就是集合更加高级和灵活。除此之外集合还提供了一系列的方法供我们使用,比起我们单独使用数组或者链表要方便的多。

集合框架的组成介绍


从上面的图我们可以看出我们集合框架的最上面有三个接口,分别是Iterator、Collection、Map。(虚线空箭头表示:实现关系;实线空箭头表示:继承关系;实现黑箭头表示:依赖关系)

Iterator

由图可以看出来,Iterator接口可以被Collection接口使用,Collection接口又可以被Map接口使用(后面会做解释)。Iterator下有LinkIterator,List接口可以使用。

Iterator我们称为迭代器,我们可以不用去管集合的底层结构,对集合进行遍历的行为。迭代器是一种设计模式。

Collection

Collection接口中的子接口有List接口、Set接口、Queue接口和AbstractCollection接口。这里我们主要讲List接口、Set接口和Queue接口。

Collection接口中,我们主要存储的是相同类型的数据。我们主要从以下三个方面来分析:数据是否可以重复、数据是否有序(包括插入有序和访问有序)、是否可以存储NULL值。

List接口

List接口下常用的集合有ArrayList、LinkedList和Vector。

List接口可以存储重复的元素,存储的数据是有序的(此处为插入有序),并且可以存储NULL值。List接口下的集合,除了Vector以外,都是线程不安全的。

Set接口

set 接口下常用的集合有HashSet、LinkedHashSet、TreeSet。

Set接口下的集合是基于Map集合实现的。因此许多的特点与Map集合是十分相似的。

Set接口下的集合不可以存储重复的数据,存储的数据是无序的,可以仅仅存储一个NULL值。Set接口下的集合都是线程不安全的。

Queue接口

Queue接口下常用的集合有PriorityQueue(优先级队列)、BlockingQueue(阻塞队列)、DeQueue(双向队列)。

Queue接口下的集合可以存储重复的数据,存储的数据是有序(有序是基于数据特征)、不可以存储NULL值。

PriorityQueue是一个队列,但其获取最大值以及最小值时,其实现结构是平衡二叉树。

BlockingQueue也是一个队列,它用在最多的地方是多线程的处理。

Map接口

Map接口中的子接口有AbstractMap和SortedMap。但其实我们只需要讲AbstractMap就可以把Map中的集合说完。Map集合中常用的有:HashMap、LinkedHashMap、TreeMap、WeakHashMap、HashTable。

Map接口下,除了HashTable以外,其余的都是线程不安全的。

Map接口中,我们主要是以键值对(Key-Value)的形式进行数据的存储。Map接口下的集合我们同样用上面的三个方面来探讨。

HashMap

HashMap是AbstractMap抽象类的一个实现类之一。

HashMap不可以存储重复的数据、存储的数据是无序的、Key和value分别可以存储最多一个NULL值。

LinkedHashMap

LinkedHashMap继承自HashMap,实际上是优化了HashMap存储的数据无序的特点,底层是以链表的形式连接起来。

LinkedHashMap不可以存储重复的数据、存储的数据是有序的、Key和value分别可以存储最多一个NULL值。

TreeMap

TreeMap继承自SortedMap和AbstractMap。TreeMap可以通过实现实现比较器来进行自定义排序。

TreeMap不可以存储重复的数据,存储的数据是有序的(仅第一个元素是有序的:最大或最小的),不可以存储NULL值。

WeakHashMap

WeakHashMap是继承自AbstractMap。WeakHashMap同样也是HashMap,但其键值对中的Key是弱键,会在JVM(Java Virtual Machine)进行GC操作时,如果Key没有对象引用整个Entry实体就会被回收。

HashTable

HashTable继承自AbstractMap。

HashTable不可以存储重复的数据,存储的数据是无序的,并且不可以存储NULL值。

HashTable是线程安全的,但现在使用较少。建议学习java.util.concurrent包下的ConcurrentHashMap。详见OSChina在线文档。

工具类

除了以上集合以外,还提供了两个工具类:Collections和Arrays。

Collections

提供了一些方法供我们使用:例如排序、二分查找、复制等。详细见OSChina在线文档中java.util包下的Collections类。

Arrays

Arrays同样也是提供了许多已经写好的方法给我们使用。详细见Collection是链接中java.util包下的Arrays类。详细见OSChina在线文档。


图片集合框架图来源于【diweikang】,其他关于集合的内容,详细查看【Java集合框架】

Java集合框架基础介绍相关推荐

  1. -1-3 java集合框架基础 java集合体系结构 Collection 常用java集合框架 如何选择集合 迭代器 泛型 通配符概念 Properties 集合 迭代器...

    集合又称之为容器存储对象的一种方式 •数组虽然也可以存储对象,但长度是固定的:显然需要可变长度的容器 集合和数组的区别?                 A:长度区别                  ...

  2. java集合框架介绍_Java集合框架介绍

    Java集合框架介绍 发布时间:2020-06-26 17:00:14 来源:亿速云 阅读:85 作者:Leah 这篇文章将为大家详细讲解有关Java集合框架介绍,文章内容质量较高,因此小编分享给大家 ...

  3. Java集合框架List,Map,Set等全面介绍

    Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构. Java集合框架的基本接口/类层次结构: java.util.Colle ...

  4. Java集合框架之四大接口、常用实现类,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  5. java集合框架介绍(转)

    从上面的集合框架图可以看到,Java集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射.Collection接口又有3种子类型 ...

  6. Java集合框架综述,这篇让你吃透!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:平凡希 cnblogs.com/xiaoxi/p/60899 ...

  7. java集合框架综述

    一.集合框架图 简化图: 说明:对于以上的框架图有如下几点说明 1.所有集合类都位于java.util包下.Java的集合类主要由两个接口派生而出:Collection和Map,Collection和 ...

  8. 容器(一)剖析面试最常见问题之 Java 集合框架

    转载自https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/collection/Java%E9%9B%86%E5%90%88%E ...

  9. java list有序还是无序_牛批!2w字的Java集合框架面试题精华集(2020最新版),赶紧收藏。...

    一个多月前,作者和一些小伙伴决定做一系列的 Java 知识点常见重要问题的小册,方便用来夯实基础!小册的标准就一个,那就是:取精华,取重点.每一本小册,我们都会充分关注我们所总结的知识点是否达到这个标 ...

  10. 厉害!Java集合框架综述,这篇让你吃透!

    作者:平凡希 来源:cnblogs.com/xiaoxi/p/6089984.html 一.集合框架图 简化图: 说明:对于以上的框架图有如下几点说明 1.所有集合类都位于java.util包下.Ja ...

最新文章

  1. 修改Kali Linux 2020.1主题颜色
  2. 黄聪:百度知道中对HTML字符实体、字符编号,开头字符的使用
  3. 这是我见过最简单粗暴的辞职书了
  4. python切片语法-python切片语法
  5. 数据结构(严蔚敏)之三——顺序栈之c语言实现
  6. Linux 退出vi编辑模式
  7. arm linux 加载.a,如何将libc.a链接到arm-linux中的共享库中使用arm-none-linux-gnueabi-gcc...
  8. mysql dnslog_dnslog小技巧
  9. idea 光标变粗 无法输入
  10. mysql集群负载均衡,这些知识你必须拿下
  11. 翻译: 图解卡尔曼滤波器的工作原理
  12. ModuleNotFoundError: No module named 'exceptions'
  13. 创建React脚手架项目
  14. chromium os 编译
  15. miRNA-转录组-蛋白组联合分析
  16. [渝粤教育] 西南科技大学 英语词汇学 在线考试复习资料
  17. github pages不能自动更新
  18. python爬取地表水水质监测数据(爬虫)
  19. python工具类-selenium 浏览器封装
  20. leetcode 974 Subarray Sums Divisible by K

热门文章

  1. 苹果开发者账号分类详解
  2. sas9.3软件java_SAS9.3 64位版Win7安装指引
  3. jmeter 安装与配置
  4. 【5】【心得】java 命令运行java程序 没有任何反应 编译没有报错
  5. 手机安装python模块吗_你不知道的Python模块安装教程
  6. 前端实现给页面中的某一部分生成水印
  7. 2017年美国大学生数学建模竞赛E题O奖65123论文解读
  8. 通过TP-Link路由器WAN口嗅探PPPoE拨号密码-路由器拨号密码破解方法
  9. 算法设计——五大算法总结
  10. Delphi开发Windows服务程序教程