【集合】JAVA基础篇(二)

news2024/12/28 23:12:58

【集合】JAVA基础篇(二)

    • 一、java常用集合
        • 1、Java集合接口的作用
        • 2、Java集合常用实现类的作用
    • 二、Collection 常用的方法
    • 三、List 集合接口
        • 1、ArrayList类的常用方法
        • 2、LinkList类中的方法
        • 3、Vector
        • 4、ArrayList 类和 LinkedList 类的区别
    • 四、Set 集合
        • 1、HashSet 类
        • 2、TreeSet 类
        • 3、HashSet 和 TreeSet 区别
    • 五、Map集合
        • 1、Map接口的常用方法
        • 2、Map的几种常用遍历方法
    • 六、Collections 类
        • 1、排序(正向和逆向)
        • 2、查找、替换操作
        • 3、复制
        • 4、线程安全
    • 七、集合实现类区别图

集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。Java 所有的集合类都位于 java.util 包下,提供了一个表示和操作对象集合的统一构架,包含大量集合接口,以及这些接口的实现类和操作它们的算法。

集合类和数组不一样,数组元素既可以是基本类型的值,也可以是对象(实际上保存的是对象的引用变量),而集合里只能保存对象(实际上只是保存对象的引用变量,但通常习惯上认为集合里保存的是对象)。

Java 集合类型分为 Collection 和 Map,它们是 Java 集合的根接口。
在这里插入图片描述在这里插入图片描述

一、java常用集合

1、Java集合接口的作用

接口名称作 用
Iterable 接口集合的输出接口,主要用于遍历输出(即迭代访问)Collection 集合中的元素,Iterator 对象被称之为迭代器。Iterable 的iterator()方法可用于获取一个迭代器
Collection 接口是 List、Set 和 Queue 的父接口,是存放一组单值的最大接口。所谓的单值是指集合中的每个元素都是一个对象。一般很少直接使用此接口直接操作。
Queue 接口Queue 是 Java 提供的队列实现,有点类似于 List。
Dueue 接口是 Queue 的一个子接口,为双向队列。
List 接口是最常用的接口。是有序集合,允许有相同的元素。使用 List 能够精确地控制每个元素插入的位置,用户能够使用索引(元素在 List 中的位置,类似于数组下标)来访问 List 中的元素,与数组类似。
Set 接口不能包含重复的元素。
Map 接口是存放一对值的最大接口,即接口中的每个元素都是一对,以 key➡value 的形式保存。

对于 Set、List、Queue 和 Map 这 4 种集合,Java 最常用的实现类分别是 HashSet、TreeSet、ArrayList、ArrayDueue、LinkedList 和 HashMap、TreeMap 等。表 2 介绍了集合中这些常用的实现类。

2、Java集合常用实现类的作用

类名称作用
HashSet为优化査询速度而设计的 Set。它是基于 HashMap 实现的,HashSet 底层使用 HashMap 来保存所有元素,实现比较简单
TreeSet实现了 Set 接口,是一个有序的 Set,这样就能从 Set 里面提取一个有序序列
ArrayList一个用数组实现的 List,能进行快速的随机访问,效率高而且实现了可变大小的数组
ArrayDueue是一个基于数组实现的双端队列,按“先进先出”的方式操作集合元素
LinkedList对顺序访问进行了优化,但随机访问的速度相对较慢。此外它还有 addFirst()、addLast()、getFirst()、getLast()、removeFirst() 和 removeLast() 等方法,能把它当成栈(Stack)或队列(Queue)来用
HsahMap按哈希算法来存取键对象
TreeMap可以对键对象进行排序

二、Collection 常用的方法

方法名称说明
boolean add(E e)向集合中添加一个元素,如果集合对象被添加操作改变了,则返回 true。E 是元素的数据类型
boolean addAll(Collection c)向集合中添加集合 c 中的所有元素,如果集合对象被添加操作改变了,则返回 true。
void clear()清除集合中的所有元素,将集合长度变为 0。
boolean contains(Object o)判断集合中是否存在指定元素
boolean containsAll(Collection c)判断集合中是否包含集合 c 中的所有元素
boolean isEmpty()判断集合是否为空
Iteratoriterator()返回一个 Iterator 对象,用于遍历集合中的元素
boolean remove(Object o)从集合中删除一个指定元素,当集合中包含了一个或多个元素 o 时,该方法只删除第一个符合条件的元素,该方法将返回 true。
boolean removeAll(Collection c)从集合中删除所有在集合 c 中出现的元素(相当于把调用该方法的集合减去集合 c)。如果该操作改变了调用该方法的集合,则该方法返回 true。
boolean retainAll(Collection c)从集合中删除集合 c 里不包含的元素(相当于把调用该方法的集合变成该集合和集合 c 的交集),如果该操作改变了调用该方法的集合,则该方法返回 true。
int size()返回集合中元素的个数
Object[] toArray()把集合转换为一个数组,所有的集合元素变成对应的数组元素。

三、List 集合接口

List 是一个有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List 集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。List 集合默认按元素的添加顺序设置元素的索引,第一个添加到 List 集合中的元素的索引为 0,第二个为 1,依此类推。

List 实现了 Collection 接口,它主要有两个常用的实现类:ArrayList 类和 LinkedList 类

1、ArrayList类的常用方法

ArrayList 类实现了可变数组的大小,提供了快速基于索引访问元素的方式,对尾部成员的增加和删除支持较好。向中间位置插入与删除元素的速度相对较慢

方法名称说明
E get(int index)获取此集合中指定索引位置的元素,E 为集合中元素的数据类型
int indexOf(Object o)返回此集合中第一次出现指定元素的索引,如果此集合不包含该元素,则返回 -1
int lastIndexOf(Object o)返回此集合中最后一次出现指定元素的索引,如果此集合不包含该元素,则返回 -1
E set(int index, Eelement)将此集合中指定索引位置的元素修改为 element 参数指定的对象。此方法返回此集合中指定索引位置的原元素
List subList(int fromlndex, int tolndex)返回一个新的集合,新集合中包含 fromlndex 和 tolndex 索引之间的所有元素。包含 fromlndex 处的元素,不包含 tolndex 索引处的元素

2、LinkList类中的方法

LinkedList 类采用链表结构保存对象,这种结构的优点是便于向集合中插入或者删除元素。

方法名称说明
void addFirst(E e)将指定元素添加到此集合的开头
void addLast(E e)将指定元素添加到此集合的末尾
E getFirst()返回此集合的第一个元素
E getLast()返回此集合的最后一个元素
E removeFirst()删除此集合中的第一个元素
E removeLast()删除此集合中的最后一个元素

3、Vector

Vector 同 ArrayList 一样,都是基于数组实现的,只不过 Vector 是一个线程安全的容器,它对内部的每个方法都简单粗暴的上锁,避免多线程引起的安全性问题,但是通常这种同步方式需要的开销比较大,因此,访问元素的效率要远远低于ArrayList。还有一点在于扩容上,ArrayList 扩容后的数组长度会增加 50%,而 Vector 的扩容长度后数组会增加一倍。

4、ArrayList 类和 LinkedList 类的区别

ArrayList 与 LinkedList 都是 List 接口的实现类,因此都实现了 List 的所有未实现的方法,只是实现的方式有所不同。

ArrayList 是基于动态数组数据结构的实现,访问元素速度优于 LinkedList。LinkedList 是基于链表数据结构的实现,占用的内存空间比较大,但在批量插入或删除数据时优于 ArrayList

对于快速访问对象的需求,使用 ArrayList 实现执行效率上会比较好。需要频繁向集合中插入和删除元素时,使用 LinkedList 类比 ArrayList 类效果高。

四、Set 集合

Set 集合类似于一个罐子,程序可以依次把多个对象“丢进”Set 集合,而 Set 集合通常不能记住元素的添加顺序。也就是说 Set 集合中的对象不按特定的方式排序,只是简单地把对象加入集合。Set 集合中不能包含重复的对象。如果添加相同的数据会被覆盖。

Set 实现了 Collection 接口,它主要有两个常用的实现类:HashSet 类和 TreeSet类

1、HashSet 类

HashSet 是 Set 接口的典型实现,大多数时候使用 Set 集合时就是使用这个实现类。HashSet 是按照 Hash 算法来存储集合中的元素。因此具有很好的存取和查找性能。

2、TreeSet 类

TreeSet 类同时实现了 Set 接口和 SortedSet 接口。SortedSet 接口是 Set 接口的子接口,可以实现对集合进行自然排序,因此使用 TreeSet 类实现的 Set 接口默认情况下是自然排序的,这里的自然排序指的是升序排序。

TreeSet 只能对实现了 Comparable 接口的类对象进行排序,因为 Comparable 接口中有一个 compareTo(Object o) 方法用于比较两个对象的大小。所以TreeSet中元素不能为空,不然会报NullPointerException异常,因为执行compareTo方法时任意一个为null就会抛出NullPointerException异常

实现Comparable接口类对象的比较方式:

比较方式
包装类(BigDecimal、Biglnteger、 Byte、Double、Float、Integer、Long 及 Short)按数字大小比较
Character按字符的 Unicode 值的数字大小比较
String按字符串中字符的 Unicode 值的数字大小比较

TreeSet 类除了实现 Collection 接口的所有方法之外,还提供了如下所示的方法:

方法名称说明
E first()返回此集合中的第一个元素。其中,E 表示集合中元素的数据类型
E last()返回此集合中的最后一个元素
E pollFirst()获取并移除此集合中的第一个元素
E pollLast()获取并移除此集合中的最后一个元素
SortedSet subSet(E fromElement,E toElement)返回一个新的集合,新集合包含原集合中 fromElement 对象与 toElement对象之间的所有对象。包含 fromElement 对象,不包含 toElement 对象
SortedSet headSet(E toElement)返回一个新的集合,新集合包含原集合中 toElement 对象之前的所有对象。不包含 toElement 对象
SortedSet tailSet(E fromElement)返回一个新的集合,新集合包含原集合中 fromElement 对象之后的所有对象。包含 fromElement 对象

TreeSet集合数据类型必须相同
TreeSet集合数据类型不同时会抛出 ClassCastException 异常
在这里插入图片描述

3、HashSet 和 TreeSet 区别

  1. HashSet 无序,TreeSet 有序。
  2. HashSet 元素可以为null,TreeSet 元素不能null。
  3. 未指定具体泛型时,HashSet 元素可以不同数据类型,TreeSet 必须相同数据类型。

五、Map集合

Map 是一种键-值对(key-value)集合,key 和 value 都可以是任何引用类型的数据。Map 的 key 不允许重复,value 可以重复,Map 中的 key 和 value 之间存在单向一对一关系,即通过指定的 key,总能找到唯一的、确定的 value。

Map 接口主要有两个实现类:HashMap 类和 TreeMap 类。其中,HashMap 类按哈希算法来存取键对象,而 TreeMap 类可以对键对象进行排序。

1、Map接口的常用方法

方法名称说明
void clear()删除该 Map 对象中的所有 key-value 对。
boolean containsKey(Object key)查询 Map 中是否包含指定的 key,如果包含则返回 true。
boolean containsValue(Object value)查询 Map 中是否包含一个或多个 value,如果包含则返回 true。
V get(Object key)返回 Map 集合中指定键对象所对应的值。V 表示值的数据类型
V put(K key, V value)向 Map 集合中添加键-值对,如果当前 Map 中已有一个与该 key 相等的 key-value 对,则新的 key-value 对会覆盖原来的 key-value 对。
void putAll(Map m)将指定 Map 中的 key-value 对复制到本 Map 中。
V remove(Object key)从 Map 集合中删除 key 对应的键-值对,返回 key 对应的 value,如果该 key 不存在,则返回 null
boolean remove(Object key, Object value)这是 Java 8 新增的方法,删除指定 key、value 所对应的 key-value 对。如果从该 Map 中成功地删除该 key-value 对,该方法返回 true,否则返回 false。
Set entrySet()返回 Map 集合中所有键-值对的 Set 集合,此 Set 集合中元素的数据类型为 Map.Entry
Set keySet()返回 Map 集合中所有键对象的 Set 集合
boolean isEmpty()查询该 Map 是否为空(即不包含任何 key-value 对),如果为空则返回 true。
int size()返回该 Map 里 key-value 对的个数
Collection values()返回该 Map 里所有 value 组成的 Collection

注:TreeMap 类的使用方法与 HashMap 类相同,唯一不同的是 TreeMap 类可以对键对象进行排序

2、Map的几种常用遍历方法

点击跳转

六、Collections 类

Collections 类是 Java 提供的一个操作 Set、List 和 Map 等集合的工具类。Collections 类提供了许多操作集合的静态方法,借助这些静态方法可以实现集合元素的排序、查找替换和复制等操作。下面介绍 Collections 类中操作集合的常用方法。

1、排序(正向和逆向)

Collections 提供了如下方法用于对 List 集合元素进行排序。

  • void reverse(List list):对指定 List 集合元素进行逆向排序。
  • void shuffle(List list):对 List 集合元素进行随机排序(shuffle 方法模拟了“洗牌”动作)。
  • void sort(List list):根据元素的自然顺序对指定 List 集合的元素按升序进行排序。
  • void sort(List list, Comparator c):根据指定 Comparator 产生的顺序对 List集合元素进行排序。
  • void swap(List list, int i, int j):将指定 List 集合中的 i 处元素和 j 处元素进行交换。
  • void rotate(List list, int distance):当 distance 为正数时,将 list 集合的后distance 个元素“整体”移到前面;当 distance 为负数时,将 list 集合的前 distance个元素“整体”移到后面。该方法不会改变集合的长度。

2、查找、替换操作

Collections 还提供了如下常用的用于查找、替换集合元素的方法。

  • int binarySearch(List list, Object key):使用二分搜索法搜索指定的 List 集合,以获得指定对象在List 集合中的索引。如果要使该方法可以正常工作,则必须保证 List 中的元素已经处于有序状态
  • Object max(Collection coll):根据元素的自然顺序,返回给定集合中的最大元素。
  • Object max(Collection coll, Comparator comp):根据 Comparator指定的顺序,返回给定集合中的最大元素。
  • Object min(Collection coll):根据元素的自然顺序,返回给定集合中的最小元素。
  • Object min(Collection coll, Comparator comp):根据 Comparator指定的顺序,返回给定集合中的最小元素。
  • void fill(List list, Object obj):使用指定元素 obj 替换指定 List 集合中的所有元素。
  • int frequency(Collection c, Object o):返回指定集合中指定元素的出现次数。
  • int indexOfSubList(List source, List target):返回子 List 对象在父 List对象中第一次出现的位置索引;如果父 List 中没有出现这样的子 List,则返回 -1。
  • int lastIndexOfSubList(List source, List target):返回子 List 对象在父 List对象中最后一次出现的位置索引;如果父 List 中没有岀现这样的子 List,则返回 -1。
  • boolean replaceAll(List list, Object oldVal, Object newVal):使用一个新值newVal 替换 List 对象的所有旧值 oldVal。

3、复制

Collections 类的 copy() 静态方法用于将指定集合中的所有元素复制到另一个集合中。执行 copy() 方法后,目标集合中每个已复制元素的索引将等同于源集合中该元素的索引。

copy() 方法的语法格式如下:

void copy(List <? super T> dest,List<? extends T> src)

4、线程安全

Collections 类还为集合类提供了同步包装器将自动同步(线程安全性)添加到任意集合。 六个核心集合接口(Collection, Set, List,Map, SortedSet和SortedMap)中的每一个都有一个静态工厂方法。通过设计iterator为 fail-fast并抛出ConcurrentModificationException。

public static Collection synchronizedCollection(Collection c);
public static Set synchronizedSet(Set s);
public static List synchronizedList(List list);
public static <K,V>  Map<K,V>  synchronizedMap(Map<K,V>  m);
public static SortedSet synchronizedSortedSet(SortedSet s);
public static <K,V>  SortedMap<K,V>  synchronizedSortedMap(SortedMap<K,V>  m);

七、集合实现类区别图

在这里插入图片描述

参考地址:
http://c.biancheng.net/view/6824.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/350476.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图解LeetCode——剑指 Offer 27. 二叉树的镜像

一、题目 请完成一个函数&#xff0c;输入一个二叉树&#xff0c;该函数输出它的镜像&#xff0c;返回镜像后的根节点TreeNode。 二、示例 2.1> 示例 1&#xff1a; 【输入】root [4,2,7,1,3,6,9] 【输出】[4,7,2,9,6,3,1] 限制&#xff1a; 0 < 节点个数 < 1000 …

Hadoop核心组成和生态系统简介

一、Hadoop的概念 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下&#xff0c;开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统&#xff08; Distributed File System&#xff09;&am…

Word处理控件Aspose.Words功能演示:使用 C++ 将电子邮件消息转换为 PDF

Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。此外&#xff0c;API支持所有流行的Word处理文件…

数据结构基础(力扣算法)(数组、字符串、链表、栈、部分树)(1-16天计划)

数据结构基础数组136. 只出现一次的数字169. 多数元素15. 三数之和75. 颜色分类56. 合并区间706. 设计哈希映射119. 杨辉三角 II48. 旋转图像59. 螺旋矩阵 II240. 搜索二维矩阵 II334. 递增的三元子序列238. 除自身以外数组的乘积435. 无重叠区间560. 和为 K 的子数组字符串415…

基于TC377的MACL-ADC General配置解读

目录标题一、MACL-ADC General1.Config Variant与AdcConfigSet2. AdcGeneral3.AdcPublishedInformation二、最终对应达芬奇生成内容一、MACL-ADC General 1.Config Variant与AdcConfigSet Config Variant &#xff1a;变体配置&#xff0c;默认选择VariantPostBuild就好了&…

融云服务推动多款应用「登顶」海外下载榜!

移步【融云全球互联网通信云】&#xff0c;了解更多信息。 2023 开年第一爆&#xff0c;属于中国出海社交软件。 在全球互联网通信云领军品牌“融云”护航下&#xff0c;多款社交黑马一路登顶、持续霸榜。它们是在中东横空出世、一经发布便冲击沙特全品类下载榜首的 Beem&…

对话系统学习概述(仅够参考)

对话系统&#xff08;仅够参考&#xff09; 目录对话系统&#xff08;仅够参考&#xff09;背景类人对话系统的关键特征1、知识运用2、个性体现3、情感识别与表达数据集评价方式评价的一些指标训练模型需要的资源任务型对话系统预训练最新研究进展参考文献背景 对话系统一般包括…

Redis三 高级篇-3. 最佳实践

《Redis三 高级篇-3. 最佳实践》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《Redis三 高级篇-3. 最佳实践》《Redis三 高级篇-3. 最佳实践》1、Redis键值设计1.1、优雅的key结构1.2、拒绝BigKey1.2.1、BigKey的危害1.2.2、如何发现BigKey①redis-cli…

Redis 数据类型

我们知道 Redis 是 Key-Value 类型缓存型数据库&#xff0c;Redis 为了存储不同类型的数据&#xff0c;提供了五种常用数据类型&#xff0c;如下所示&#xff1a; string&#xff08;字符串&#xff09;hash&#xff08;哈希散列&#xff09;list&#xff08;列表&#xff09;…

多线程事务怎么回滚

背景介绍1&#xff0c;最近有一个大数据量插入的操作入库的业务场景&#xff0c;需要先做一些其他修改操作&#xff0c;然后在执行插入操作&#xff0c;由于插入数据可能会很多&#xff0c;用到多线程去拆分数据并行处理来提高响应时间&#xff0c;如果有一个线程执行失败&…

返回数组的上三角和下三角np.triu()和np.tril()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 返回数组的上三角和下三角 np.triu()和np.tril() 选择题 以下说法错误的是? import numpy as np anp.array([[1,2,3],[4,5,6],[7,8,9]]) print("【显示】a&#xff1a;\n",a) pri…

一、Python时间序列小波分析——实例分析

小波分析是在Fourier分析基础上发展起来的一种新的时频局部化分析方法。小波分析的基本思想是用一簇小波函数系来表示或逼近某一信号或函数。 小波分析原理涉及到傅里叶变换&#xff0c;并有多种小波变换&#xff0c;有点点小复杂。但是不会原理没关系&#xff0c;只要会应用并…

单臂路由配置

单臂路由实现不同VLAN间通信 链路类型 交换机连接主机的端口为access链路 交换机连接路由器的端口为Trunk链路 子接口 路由器的物理接口可以被划分成多个逻辑接口 每个子接口对应一个VLAN网段的网关 我们需要知道的是单臂路由和虚拟机软件原理比较相似。他们都是依托于物理设备…

按键70秒,Root轻松得:Linux惊现高危漏洞

导读E安全11月16日讯 Linux被发现高危漏洞(CVE-2016-4484)&#xff0c;攻击者可以通过持续按下Enter键70秒钟来获取 root initramfs shell&#xff0c;进而破坏Linux boxes。漏洞存在于Linux流行变体中的统一密钥设置(LUKS)。通过访问shell&#xff0c;攻击者可以解密Linux机…

标签管理系统

电子墨水屏最大的不便利之处在于它是单色屏&#xff0c;显示速度不够快&#xff0c;因为显示内容的单色性&#xff0c;要求需要显示的数据处理好后&#xff0c;以单色位图的方式把数据信息发送到屏幕上才可以正常显示。 我们把这个制作显示内容的方式叫做模版&#xff0c;有了…

Zynq 裸机 PS + PL 双网口实现之 lwip 库文件修改

基于 xilinx vivado 2017.4 库文件 lwip141_v2_0 的修改&#xff1a; 添加对 PHY 芯片 ksz9031 的支持&#xff1b; 添加 SDK 中 LWIP 参数设置对话框 emio_options 选项&#xff1b; 添加 XPAR_GMII2RGMIICON_0N_ETH0_ADDR 和 XPAR_GMII2RGMIICON_0N_ETH1_ADDR 宏配置&#…

布隆过滤器和布谷鸟过滤器详解

今天和大家分享下布隆过滤器和布谷鸟过滤器 一.布隆过滤器 1.简单介绍 布隆过滤器是用于检索一个元素是否在一个集合中的算法&#xff0c;是一种用空间换时间的查询算法。 2.实现原理 布隆过滤器的存储结构是一个bitmap结构&#xff0c;初始值都是0&#xff0c;如下图所示&am…

内核模块(传参和依赖)

目录 一、模块传参 二、模块依赖 三、内核空间和用户空间 四、执行流 五、模块编程与应用编程的比较 六、内核接口头文件查询 七、小作业 一、模块传参 module_param(name,type,perm);//将指定的全局变量设置成模块参数 name:全局变量名 type&#xff1a; 使用符号 …

MFC消息机制

1.消息映射消息映射是一个将消息和成员函数相互关联的表。比如&#xff0c;框架窗口接收到一个鼠标左击消息&#xff0c;MFC将搜索该窗口的消息映射&#xff0c;如果存在一个处理WM_LBUTTTONDOWN消息的处理程序&#xff0c;然后就调用OnButtonDown。2.消息映射机制2.1 声明宏 写…

教务查询系统简介

教务查询系统简介 项目核心代码展示 service层如下&#xff1a; Teacher老师Service层&#xff1a; public interface TeacherService {//根据id更新老师信息void updateById(Integer id, TeacherCustom teacherCustom) throws Exception;//根据id删除老师信息void removeB…