我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java Collection集合用法详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java Collection集合用法详解

1.集合的主要体系及分支

在这里插入图片描述

1.1Collection集合及实现类

1.概述:首先Collection是属于单列集合的顶层接口,表示为一组对象。其类型为引用数据类型,具体创建对象,通过多态的形式进行。
2.主要常用方法(E这种是指泛型类型,可以为任何引用类型):

在这里插入图片描述

3.Collection集合的遍历(Iterator迭代器,集合的专用遍历方式)
概述:

在这里插入图片描述

2.List集合(List是带有索引的,所以多注意索引越界等问题)

1.概述:有序集合,且允许有重复的元素,使用者可以精确的控制每个元素的插入位置,并且可以快速访问。
特点:有序(存储与取出顺序一致),且元素可以重复。

2.常用方法:

在这里插入图片描述

3.List的列表迭代器(Listlterator)

用法:可以按照任意方向进行遍历,并在迭代期间修改列表,并获取列表中迭代器的位置,是list集合特有的迭代器。
常用方法:

在这里插入图片描述

当使用倒叙遍历时,是需要注意先进行一遍正向顺序;或者直接通过Collection工具类中的reverse()的方法进行倒叙,再输出。

4.并发修改异常(ConcurrentModificationException)

主要产生原因:通过内部类的形式,当通过hasNext()这个方法时,遍历集合中加以判断并添加时会发生并发异常,是因为list.add()会导致实际的修改集合和预期的修改集合不对等而触发并发修改异常。
因为:当你使用list的add方法时候,只会添加实际修改集合的值,而预期的修改集合值不会增加,而hasNext()的使用是需要预期和实际进行判断的。
如何避免这种异常出现?

1.使用列表迭代器的方法进行添加,因为add不会导致实际与预期的不对等。

2.通过for循环进行遍历。

2.1 List的实现类

1.ArrayList(底层数据结构属于数组实现,增删慢,查询快);
2.LinkedList(底层数据结构属于双链表,查询慢,增删快);
常用方法:

在这里插入图片描述

3.Set集合

特点:集合是无序的(存储与取出顺序不一致),且不允许有重复元素,没有索引值,因此不能使用普通for遍历。

3.1HashSet(Set的实现类)

1.哈希值

概述:哈希值是JDK通过对象的地址或者字符串或者数字算出来的int类型的值。
特点:同一个对象的哈希值是相同的,且在默认情况下不同对象的哈希值是不同的。

2.数据结构之哈希表

在这里插入图片描述

3.怎么HashSet集合的元素唯一性?(重中之重)

在这里插入图片描述

4.LinkedHashSet集合(HashSet的子类)

在这里插入图片描述

LinkedHashSet集合元素是有序的。

3.2TreeSet集合(Set的实现类)

特点:可以通过自然排序或者特定的比较器(主要用于Comparable接口来进行)来进行排序;
自然排序Comparable:

在这里插入图片描述

String类实现类自然排序Comparable接口,则可以直接调用用来判断字符串之间的大小,而当一个类的对象之间需要比较时,是需要实现自然排序Comparable接口,重写其中compareTo的方法。(TreetSet可以通过匿名内部类的方法来进行重写自然排序方法)。

4.集合的高频面试题

4.1Arraylist 与 LinkedList 异同

1. 是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全;
2. 底层数据结构: Arraylist 底层使用的是Object数组;LinkedList 底层使用的是双向循环链表数据结构;
3. 插入和删除是否受元素位置的影响: ① ArrayList 采用数组存储,所以插入和删除元素的时间复杂度受元素位置的影响。 比如:执行add(E e)方法的时候, ArrayList 会默认在将指定的元素追加到此列表的末尾,这种情况时间复杂度就是O(1)。但是如果要在指定位置 i 插入和删除元素的话(add(int index, E element))时间复杂度就为 O(n-i)。因为在进行上述操作的时候集合中第 i 和第 i 个元素之后的(n-i)个元素都要执行向后位/向前移一位的操作。 ② LinkedList 采用链表存储,所以插入,删除元素时间复杂度不受元素位置的影响,都是近似 O(1)而数组为近似 O(n)。
4. 是否支持快速随机访问: LinkedList 不支持高效的随机元素访问,而ArrayList 实现了RandmoAccess 接口,所以有随机访问功能。快速随机访问就是通过元素的序号快速获取元素对象(对应于get(int index)方法)。
5. 内存空间占用: ArrayList的空 间浪费主要体现在在list列表的结尾会预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗比ArrayList更多的空间(因为要存放直接后继和直接前驱以及数据)。

4.2ArrayList 与 Vector 区别

Vector类的所有方法都是同步的。可以由两个线程安全地访问一个Vector对象、但是一个线程访问Vector的话代码要在同步操作上耗费大量的时间。
Arraylist不是同步的,所以在不需要保证线程安全时时建议使用Arraylist。

集合框架底层数据结构总结

 1.Collection

1. List

Arraylist: Object数组
Vector: Object数组
LinkedList: 双向循环链表

2. Set

HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素。
LinkedHashSet: LinkedHashSet 继承与 HashSet,并且其内部是通过 LinkedHashMap 来实现的。有点类似于我们之前说的LinkedHashMap 其内部是基于 Hashmap 实现一样,不过还是有一点点区别的。
TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树)。

到此这篇关于Java Collection集合用法详解的文章就介绍到这了,更多相关Java Collection集合内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java Collection集合用法详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java集合Collection常用方法解读

这篇文章主要介绍了java集合Collection常用方法解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-13

java集合Collection常用方法有哪些

这篇文章主要介绍了java集合Collection常用方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java集合Collection常用方法有哪些文章都会有所收获,下面我们一起来看看吧。为什么要有集合
2023-07-05

Java的Collection集合常用方法有哪些

这篇文章主要介绍了Java的Collection集合常用方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java的Collection集合常用方法有哪些文章都会有所收获,下面我们一起来看看吧。1、boo
2023-06-29

Java中Collection集合的常用方法有哪些

本篇文章为大家展示了Java中Collection集合的常用方法有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、boolean add(E e)添加元素到Collection集合中。 2、b
2023-06-25

Java Collection集合的ArrayList和HashSet怎么用

今天小编给大家分享一下Java Collection集合的ArrayList和HashSet怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我
2023-06-29

java collection集合的子类有哪些

在Java中,Collection接口是所有集合类的父接口,它的直接子接口包括List、Set和Queue接口。而List接口的子类有ArrayList、LinkedList和Vector,Set接口的子类有HashSet、TreeSet和
2023-10-07

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录