服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java Collection集合用法详解

Java Collection集合用法详解

2022-02-25 13:30做哈白日梦 Java教程

首先Collection是属于单列集合的顶层接口,表示为一组对象。其类型为引用数据类型,具体创建对象,通过多态的形式进行,本文将给大家详细的介绍,需要的朋友可以参考下

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

Java Collection集合用法详解

1.1Collection集合及实现类

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

Java Collection集合用法详解

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

Java Collection集合用法详解

 

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

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

2.常用方法:

Java Collection集合用法详解

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

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

Java Collection集合用法详解

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

4.并发修改异常(ConcurrentModificationException)

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

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

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

2.1 List的实现类

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

Java Collection集合用法详解

 

3.Set集合

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

3.1HashSet(Set的实现类)

1.哈希值

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

2.数据结构之哈希表

Java Collection集合用法详解

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

Java Collection集合用法详解

4.LinkedHashSet集合(HashSet的子类)

Java Collection集合用法详解

LinkedHashSet集合元素是有序的。

3.2TreeSet集合(Set的实现类)

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

Java Collection集合用法详解

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集合内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_46870007/article/details/120859755

延伸 · 阅读

精彩推荐
  • Java教程Java二分法查找_动力节点Java学院整理

    Java二分法查找_动力节点Java学院整理

    这篇文章主要介绍了Java二分法查找的相关资料,需要的朋友可以参考下 ...

    动力节点3302020-09-14
  • Java教程MyBatis插入数据返回主键的介绍

    MyBatis插入数据返回主键的介绍

    今天小编就为大家分享一篇关于MyBatis插入数据返回主键的介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编...

    Haozz_19945822021-07-02
  • Java教程java显示当前美国洛杉矶时间

    java显示当前美国洛杉矶时间

    这篇文章主要介绍了java显示当前美国洛杉矶时间的方法,也就是当前时间的切换,需要的朋友可以参考下 ...

    java教程网5212019-11-11
  • Java教程mybatis教程之延迟加载详解

    mybatis教程之延迟加载详解

    本篇文章主要介绍了mybatis教程之延迟加载详解。详细介绍了延迟加载的意义和用法实现,有兴趣的可以了解一下...

    SIHAIloveYAN5142020-09-22
  • Java教程一个没有' if '的Spring++框架就是这么'肝 '

    一个没有' if '的Spring++框架就是这么'肝 '

    人生没有 i f,所以这个框架来了,一直有写个框架的想法(每个程序员都有的冲动)!怎么也磨灭不了,这次终于得以了了心愿!肝了几天,熬了几夜,也算是没...

    hihuzi8262021-03-14
  • Java教程Java Executor 框架的实例详解

    Java Executor 框架的实例详解

    这篇文章主要介绍了Java Executor 框架的实例详解的相关资料,这里提供实例来帮助大家学习理解这部分内容,需要的朋友可以参考下...

    攻城狮--晴明6552020-12-30
  • Java教程Java版水果管理系统源码

    Java版水果管理系统源码

    这篇文章主要为大家详细介绍了Java版水果管理系统源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    叁念10012021-03-22
  • Java教程Java回调方法详解

    Java回调方法详解

    本篇文章主要介绍了Java回调方法的步骤、回调的例子、异步回调与同步回调、回调方法在通信中的应用等。具有一定的参考价值,下面跟着小编一起来看下...

    byhieg3222020-07-22