集合进阶指南:从基础知识到高级应用

集合高级

Collection集合

数组和集合的区别

相同点

都是容器,可以存储多个数据

不同点
  • 数组的长度是不可变的,集合的长度是可变的
  • 数组可以存储基本数据类型和引用数据类型

集合只能存储引用数据类型,如果要存基本数据类型,需要存对应的包装类

集合类体系结构

在这里插入图片描述

Collection集合概述和使用

Collection集合概述
  • 是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
  • JDK不提供此接口的任何实现,它提供更具体的子接口(如Set和List)实现
创建Collection集合的对象
  • 多态的实现
  • 集体的实现类
Collection集合常用方法
方法名说明
boolean add(E e)添加元素
boolean remove(Object o)从集合中移除指定的元素
boolean removelf(Object o)根据条件进行移除
void clear()清空集合中的所有元素
boolean contains(Object o)判断集合中是否存在指定的元素
boolean isEmpty()判断集合是否为空
int size()集合的长度,也就是集合中元素的个数

Collection集合的遍历

迭代器
  • 迭代器,集合的专用遍历方式
  • Iterator();
  • < E >iterator(); 返回此集合中元素的迭代器,通过集合对象的iterator()方法得到
Iterator中的常用方法
方法名说明
boolean hasNext();判断当前位置是否有元素可以被取出
E next();获取当前位置的元素, 将迭代器对象移向下一个索引位置
集合的遍历
public class IteratorDemo1 {public static void main(String[] args) {//创建集合对象Collection<String> c = new ArrayList<>();//添加元素c.add("hello");c.add("world");c.add("java");c.add("javaee");//Iterator<E> iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到Iterator<String> it = c.iterator();//用while循环改进元素的判断和获取while (it.hasNext()) {String s = it.next();System.out.println(s);}}
}
迭代器中删除的方法

void remove(); 删除迭代器对象当前指向的元素

public class IteratorDemo2 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("a");list.add("b");list.add("b");list.add("c");list.add("d");Iterator<String> it = list.iterator();while(it.hasNext()){String s = it.next();if("b".equals(s)){//指向谁,那么此时就删除谁.it.remove();}}System.out.println(list);}
}

List集合

概述
  • 有序集合,这里的有序指存取顺序
  • 用户可以精准控制列表中每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素
  • 与Set集合不同,列表通常允许重复元素
List集合的特点
  • 存取有序
  • 可以重复
  • 有索引
特有方法
方法名说明
void add(int index, E element)在此集合中的指定位置插入指定的元素
E remove(int index)删除指定索引处的元素,返回被删除的元素
E set(int index,E element)修改指定索引处的元素,返回被修改的元素
E get(int index)返回指定索引处的元素

数据结构

栈结构

先进后出

队列机构

先进先出

数据结构之数组和链表

数组结构

查询快, 增删慢

队列结构

查询慢,增删快

List集合的实现类

List集合子类的特点

ArrayList集合

底层是数组结构实现,查询快,增删慢

LinkedList集合

底层是链表结构实现,查询慢,增删快

LinkedList集合的特有功能
方法名说明
public void addFirst(E e)在该集合开头插入指定元素
public void addLast(E e)将指定的元素追加到此列表的末尾
public E getFirst()返回此列表中的第一个元素
public E getLast()返回此列表中的最后一个元素
public E removeFirst()从此列表中删除并返回第一个元素
public E removeLast()从此列表中删除并返回最后一个元素

Set集合

概述和特点
  • 不可以储存重复元素
  • 没有索引,不能使用普通for循环遍历

TreeSet集合

特点
  • 不可以存储重复元素
  • 没有索引
  • 可以将元素按照规则进行排序
  1. TreeSet(); 根据其元素的自然排序进行排序
  2. TreeSet(Comparator comparator); 根据指定的比较器进行排序

HashSet集合

概述与特点
  • 底层数据结构是哈希表
  • 存取无序
  • 不可以储存重复元素
  • 没有索引,不能使用普通for循环遍历

哈希值

简介

是JDk根据对象的地址或者字符串或者数字算出来的int类型的数值

如何获取哈希值

Object类中的public int hashCode(); 返回对象的哈希码值

哈希值的特点
  • 同一个对象多次调用hashCode()方法返回的哈希值是相同的
  • 默认情况下,不同对象的哈希值是不同的. 而重写hashCode()方法,可以实现让不同对象的哈希值相同

总结:

hashSet集合储存自定义类型的元素,想要实现元素的唯一,要求必须重写hashCode方法和equals方法

Map集合

概述

interface Map<K,V> K:键的类型;V:值的类型

特点
  • 双列集合, 一个键对应一个值
  • 键不可以重复,值可以重复
常用方法
方法名说明
V put(K key, V value)添加元素
V remove(Object key)根据键删除键值对元素
void clear()移除所有的键值对元素
boolean containsKey(Object key)判断集合是否包含指定的键
boolean containsValue(Object value)判断集合是否包含指定的值
boolean isEmpty()判断集合是否为空
int size()集合的长度,也就是集合中键值对的个数
Map集合的获取功能
方法名说明
V get(Object key)根据键获取值
Set< K > keySet()获取所有键的集合
Collection< V > values()获取所有值的集合
Set< Map.Entry< K,V > > entrySet获取所有键值对对象的集合

HashMap集合

概述和特点
  • HashMap底层是哈希表结构的
  • 依赖hashCode方法和equals方法保证键的唯一
  • 如果键要存储的是自定义对象,需要重写hashCode和equals方法

TreeMap集合

概述和特点
  • TreeMap底层是红黑树结构
  • 依赖自然排序或者比较器排序,对键进行排序
  • 如果键存储的是自定义对象,需要实现Comparable接口或者在创建TreeMap对象时候给出比较器排序规则

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Qt开发流程】之元对象系统

描述 Qt的元对象系统&#xff08;Meta-Object System&#xff09;是Qt框架的核心机制之一&#xff0c;它提供了运行时类型信息&#xff08;RTTI&#xff09;和信号与槽&#xff08;Signals and Slots&#xff09;机制的支持。元对象系统在Qt中扮演了很重要的角色&#xff0c;它…

如何使用Matlab完成窗口与子窗口

目录 一、前言 二、主窗口与主窗口按钮 三、子窗口 四、调用函数并显示在子窗口中的文本框中 五、关闭子窗口 一、前言 有时候需要借用Matlab完成一个图窗功能&#xff0c;但是我们的程序不仅拥有功能&#xff0c;还拥有一些子功能&#xff0c;那么我们该如何借助Matlab完…

通过K8S安装人大金仓数据库

1. 离线下载镜像&#xff0c;请点击 2. 官网下载镜像 https://www.kingbase.com.cn/xzzx/index.htm&#xff0c;根据自己的需求下载对应版本。 3. K8S需要的yaml清单 cat > kingbase.yaml << EOF apiVersion: apps/v1 kind: Deployment metadata:name: kingbase-…

每日OJ题_算法_双指针③_力扣202. 快乐数

目录 力扣202. 快乐数 解析代码 力扣202. 快乐数 202. 快乐数 - 力扣&#xff08;LeetCode&#xff09; 难度 简单 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和…

Peter算法小课堂—贪心算法

课前思考&#xff1a;贪心是什么&#xff1f;贪心如何“贪”&#xff1f; 课前小视频&#xff1a;什么是贪心算法 - 知乎 (zhihu.com) 贪心 贪心是一种寻找最优解问题的常用方法。 贪心一般将求解过程分拆成若干个步骤&#xff0c;自顶向下&#xff0c;解决问题 太戈编程第…

yum源不起作用_yum无法安装程序_Linux默认源替换---Linux工作笔记067

今天在一台机器上进行安装yum install的时候提示,yum不可用,这时候,折腾了一会 后来更换了默认源就可以了. 首先: 可以看到原来的里面有个 yum.repos.d 里面放了很多源,但是这些源是不可以联网的. 是内网的源,所以,我对他进行了 mv yum.repos.d yum.repos.d.bak 重命名 然…

pycharm中py文件设置参数

在py文件中右键 直接对应复制进去即可

openGauss学习笔记-147 openGauss 数据库运维-备份与恢复-逻辑备份与恢复之gs_dump

文章目录 openGauss学习笔记-147 openGauss 数据库运维-备份与恢复-逻辑备份与恢复之gs_dump147.1 背景信息147.2 注意事项147.3 语法147.4 参数说明147.4.1 通用参数&#xff1a;147.4.2 转储参数&#xff1a;147.4.3 连接参数&#xff1a; 147.5 说明147.6 示例 openGauss学习…

Windows故障排除 – 连接WiFi却无法上网

Windows故障排除 – 连接WiFi却无法上网 Windows Troubleshooting - Connecting WiFi but PC Cannot Browse Internet By JacksonML 有个同学买了一台崭新的D品牌游戏本&#xff0c;i7处理器&#xff0c;英伟达RTX系列独立显卡及15寸液晶显示器&#xff0c;可谓功能强大。但是…

Ubuntu宝塔面板本地部署轻论坛系统HadSky并远程访问

文章目录 前言1. 网站搭建1.1 网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3 Cpolar稳定隧道&#xff08;本地设置&#xff09;2.4 公网访问测试 总结 前言 经过多年的基础…

系列八、SpringBoot中自定义SpringMVC配置

一、概述 作为Spring家族的明星产品&#xff0c;SpringBoot极大地简化了程序员的日常开发&#xff0c;提高了开发效率。我们很容易得借助于SpringBoot就可以快速开发业务代码。一般情况下&#xff0c;公司的日常开发都是基于web服务的&#xff0c;我们在使用idea等工具初始化一…

JavaScript如何实现按键音效、视频播放,标签分类切换横向滚动

1.使用HTML5的audio标签 &#xff08;音频播放&#xff09; <audio id"click-sound"><source src"audio/show.mp3" type"audio/mpeg"> </audio> <button id"button">按钮</button> var clickSound d…