【Java】容器|Set、List、Map及常用API

目录

一、概述

二、List

1、List的常用API

2、ArrayList

3、List遍历

三、Set

1、Set的常用方法:

2、HashSet

3、遍历集合:

四、Map 

1、Map常用API

2、HashMap

3、遍历Map 

五、迭代器


一、概述

在Java中所有的容器都属于Collection接口下的内容

1、Set——这种容器的特点: 存储的数据不能重复. 自动去重. 无序 无索引 不可重复

2、List——这种容器和数组差不多, 优势是不定长. 随便加. 有序 有索引,可重复

3、Map——这种容器是一对一对的存 ,键值对 就像我们存电话号码的时候. 肯定是”名字-电话”这样存储. 找电话用名字找就行了

 

二、List

List有两个常用的实现类: ArrayList, LinkedList.

List list = new ArrayList()——实现类 向上转型

List list = new LinkedList()——实现类 向上转型

ArrayList和LinkedList在使用上没有什么区别. 注意, 其实是有区别的. 只是在明面上看不出来而已.

1、List的常用API

  1. add(obj) ——添加元素
  2. get(i) ——查看第i个元素

  3. set(…)——修改某个位置

  4. size() ——查看列表中的数据个数

  5. isEmpty() ——判断是否是空列表

  6. indexOf(xxx) ——查看xxx元素在列表中的位置

  7. lastIndexOf(xxx) ——查看xxx元素在列表中最后一次出现的位置

  8. contains(xxx) ——判断列表中是否包含了xxx,列表中包含指定元素,则返回 true,否则返回 false

  9. subList(start,end) ——从列表中start开始截取, 截取到end 但不包括end

  10. toArray() 集合转化成数组

  11. remove(obj) 删除某个元素

  12. remove(i) 删除某个位置的元素

⚠️容器为了通用性,往容器里面加的东西都会被向上转型为Object类型,get() 拿到的数据是object类型,需要再强转为原本的类型(向下转型)

2、ArrayList

List是一个接口,而ArrayList是List接口的一个实现类。

ArrayList类继承并实现了List接口。

因此,List接口不能被构造,也就不能创建实例对象,但是我们可以为List接口创建一个指向自己的对象引用,而ArrayList实现类的实例对象就在这充当了这个指向List接口的对象引用。

List list = new ArrayList();

  • 特点:有序 有索引 可重复 底层是数组 里面可以放不同的变量

  • 正确使用方式是要 规定集合的数据类型——泛型:可以是任意的引用数据类型;

  • 泛型:规定集合存储的数据类型。

3、List遍历

List遍历:for循环;增强for;迭代器

ArrayList<String> list = new ArrayList<>();
list.add("fsakjfs");
list.add("13213");
list.add("[][(*(");//遍历格式1: (通用格式):size() + get();
for(int i=0;i<list.size();i++){System.out.println(list.get(i));
}//遍历格式2:增强for 不能直接访问索引 只能从头遍历到尾
for(String element : list){System.out.println(element);
}//遍历格式3:迭代器  返回一个迭代器的对象 泛型
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){      //是不是有下一个元素String next = iterator.next();//获取当前元素  最开始指向空 移动指针 移动到下一个元素System.out.println(next);
}

三、Set

Set是一个可以自动去除重复的容器

Set是一个接口. 有两个常用的实现类. 一个是HashSet, 另一个是TreeSet(排序)

HashSet按照Hash的想法来放数据, TreeSet按照Tree的思想来存放数据.

HashSet 瞎摆->存储的速度快

TreeSet 按顺序摆->存储的时候 帮我们排序, 存储的速度就慢

1、Set的常用方法:

  1. add() ——添加元素

  2. remove() ——删除元素

  3. size() ——集合中元素的个数

  4. contains() ——判断是否包含了xxxx

  5. isEmpty() ——判断集合是否为空

  6. clear() ——将集合里的所有数据清空

  7. toArray(),将集合转化成为对应数组类型的数据,Set 集合中的所有对象创建一个数组

2、HashSet

  • 特点:无序,不可重复。 HashSet<T> set = new HashSet<T>();

3、遍历集合:

Set遍历:1、增强for 2、迭代器

因为HashSet无序,不可重复,没有索引不能用for循环

//遍历1:增强for,底层就是迭代器next
for(String element : set) {System.out.println(element);
}
//遍历2:迭代器
/*
迭代器是一个接口 Iterable接口有个iterator()方法,
该方法返回一个Iterable接口的实现类 实现类重写iterator()方法*/
System.out.println("==================");
Iterator<String> it = set.iterator(); //生成返回值的快捷方式:ctrl + alt + v  / .var tab键
while(it.hasNext()) {String next = it.next();System.out.println(next);
}

四、Map 

Map常见的实现类也有两个, 一个是HashMap(常用),不排序; 另一个TreeMap.排序

1、Map常用API

  1. put(…)——添加数据

  2. get(key) ——使用key查询value

  3. isEmpty()—— 判断Map是否是空的

  4. size() ——返回key, value键值对的个数

  5. containsKey(key) ——判断是否存在key

  6. remove(key) ——根据key删除信息

  7. keySet() ——获取到map中key的集合set

  8. clear() ——清空map里的所有key和value

  9. entrySet()——返回一个Set集合,此集合的类型为Map.Entry。

2、HashMap

  • 特点:键值对。一个键对应一个值,键不能重复。存储重复的键后会覆盖之前的值。

  • key+value是一个entry

entry:Map是java中的接口,Map.Entry是Map的一个内部接口,内部类,此接口为泛型,定义为Entry<K,V>。

它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法

keySet()方法返回值是Map中key值的集合;
entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。


Set<Map.Entry<K,V>> entrySet = map.entrySet();
        for(Entry e : entrySet) {
            System.out.println(e.getKey() + "===" + e.getValue());
        }

3、遍历Map 

增强for、迭代器

public static void main(String[] args) {HashMap<String,Integer> map = new HashMap<>();map.put("ID",99);   //put 添加+覆盖(相同的key会覆盖)map.put("AGE",18);map.put("SCORE",99);System.out.println(map);//1、通过键找值  get  找到所有的键  keySet——把key拿出来打包成set集合,遍历以此取出对应的值//找出所有的键Set<String> keySet = map.keySet();  //for(String key : keySet) {//找到对应的值Integer value = map.get(key);System.out.println(key + ":" + value);}System.out.println("================");//2、通过取出所有的键值对,entrySet————也是一个set集合//Entry是map的类中类Set<Map.Entry<String, Integer>> entrySet = map.entrySet();for(Map.Entry<String, Integer> entry : entrySet) {System.out.println(entry.getKey() + ":" + entry.getValue());}System.out.println("==============");//3、Lambdamap.forEach((k,v) -> {System.out.println(k + " : " + v);});//4、迭代器 通过key的迭代器Set set = map.keySet();//拿出所有的keyIterator it = set.iterator();while(it.hasNext()){String key = (String) it.next();//拿到所有的key 强制转换System.out.println(map.get(key));}//5、迭代器 通过entry  entry是map的内部类Set setEntry  = map.entrySet();//entry也是set集合Iterator itentry = setEntry.iterator();while(itentry.hasNext()){Map.Entry entry = (Map.Entry) itentry.next();//拿到所有的key 强制转换System.out.println(entry.getKey());System.out.println(entry.getValue());}}

五、迭代器

迭代器是用来干嘛的? 遍历数据集合的. 它存在的意义就是可以让不同的数据类型拥有相同的遍历方式

List, Set, Map. 完全不同的三种数据类型. 但是都可以使用Iterator.

方法:

  • next() ——会自动帮我们获取到元素. 并且指针指向下一个元素
  • hasnext()——判断有没有下一个元素,因为集合如果拿空了会报错

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

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

相关文章

C语言数据结构(7)——树、二叉树前言

欢迎来到博主的专栏——C语言数据结构 博主ID&#xff1a;代码小豪 文章目录 树二叉树特殊二叉树满二叉树完全二叉树 完全二叉树的存储结构 树 树是一个非线性的数据结构&#xff0c;由N个结点构成的集合。 树的各个结点由一个根结点联系起来&#xff0c;这个根节点没有前驱…

【leetcode热题】 分数到小数

给定两个整数&#xff0c;分别表示分数的分子 numerator 和分母 denominator&#xff0c;以 字符串形式返回小数 。 如果小数部分为循环小数&#xff0c;则将循环的部分括在括号内。 如果存在多个答案&#xff0c;只需返回 任意一个 。 对于所有给定的输入&#xff0c;保证 …

Qt教程 — 3.4 深入了解Qt 控件:Input Widgets部件(3)

目录 1 Input Widgets简介 2 如何使用Input Widgets部件 2.1 Dial 组件-模拟车速表 2.2 QScrollBar组件-创建水平和垂直滚动条 2.3 QSlider组件-创建水平和垂直滑动条 2.4 QKeySequenceEdit组件-捕获键盘快捷键 Input Widgets部件部件较多&#xff0c;将分为三篇文章介绍…

DDR协议基础进阶(三)——(基本功能、初始化、MR寄存器)

DDR协议基础进阶&#xff08;三&#xff09;——&#xff08;基本功能、初始化、MR寄存器&#xff09; 一、DDR基本功能 DDR基本功能主要包括&#xff1a; 8-bit prefetch预取——8-bit&#xff0c;是指8位数据&#xff0c;即8倍芯片位宽的数据。由于DDR内部数据传输是32bit…

python3GUI--qt仿暴风影音视频播放器By:PyQt5(附下载地址)

文章目录 一&#xff0e;前言二&#xff0e;环境1.开发环境2.打包环境3.运行环境 三&#xff0e;软件截图1.启动页2.视频播放3.音频播放4.其他1.托盘2.对话框 四&#xff0e;功能总览五&#xff0e;代码展示&心得1.UI设计2.如何防止卡顿3.如何自定义组件 五&#xff0e;思考…

VLC抓取m3u8视频

前言 最近想看一些网络视频&#xff0c;但是很多时候网页上是m3u8推流的&#xff0c;如果在线看&#xff0c;速度又慢&#xff0c;所以就想下载下来&#xff0c;就想到了VLC的推流&#xff0c;转换能力&#xff0c;查阅资料&#xff0c;加上实践&#xff0c;总结心得。 设置中…

RabbitMQ进阶

1.消息可靠性 消息从发送,到消费者接收,会经历多个过程: 其中的每一步都可能导致消息丢失,常见的丢失原因包括: - 发送时丢失: - 生产者发送的消息未送达exchange - 消息到达exchange后未到达queue - MQ宕机,queue将消息丢失 - consumer接收到消息后未消费就宕机 …

【C语言】浮点型在内存中的存储

文章目录 例题引入剖析原因浮点型的二进制转换&#xff08;M&#xff09;正负号之分&#xff08;S&#xff09;科学记数法&#xff08;E&#xff09;关于 S E M 在内存中的存储存取浮点型时的情况讨论 例题解析整形存储为浮点型并输出浮点型存储为整形并输出 在我的上一篇博客中…

接雨水-热题 100?-Lua 中文代码解题第4题

接雨水-热题 100&#xff1f;-Lua 中文代码解题第4题 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释…

算法——前缀和之除自身以外数组的乘积、和为K的子数组、和可被K整除的子数组、连续数组、矩阵区域和

这几道题对于我们前面讲过的一维、二维前缀和进行了运用,包含了面对特殊情况的反操作 目录 4.除自身以外数组的乘积 4.1解析 4.2题解 5.和为K的子数组 5.1解析 5.2题解 6.和可被K整除的子数组 6.1解析 6.2题解 7.连续数组 7.1题解 7.2题解 8.矩阵区域和 8.1解析 …

GET和POST方法的区别

GET和POST的区别 在我们开发项目的时候常常会在Controller层使用到POST方法或者GET方法&#xff0c;犹豫到底将接口定义为GET方法还是POST方法&#xff1f;那这两者之间有什么区别呢&#xff1f; 看一下官方定义&#xff1a; GET 和 POST 是 HTTP 协议中最常用的两种请求方法…

爬虫学习 Scrapy中间件代理UA随机selenium使用

目录 中间件UA、代理处理---process_requestUA随机 代理处理seleniumscrapy 中间件 控制台操作 (百度只起个名 scrapy startproject mid scrapy genspider baidu baidu.com setting.py内 ROBOTSTXT_OBEY FalseLOG_LEVEL "WARNING"运行 scrapy crawl baidu middle…

ArcGIS分享图层数据的最佳方法

在工作中&#xff0c;经常需要将图层数据分享给其他人。 如下图所示&#xff0c;需要分享的是【CJDCQ】和【GHDLTB】&#xff0c;图层带有符号系统&#xff1a; 一、分享gdb数据库及lyr文件 分享数据自然要找到源数据&#xff1a; 但是&#xff0c;gdb数据是不带符号系统的&a…

微信小程序开发系列(三十四)·自定义组件的创建、注册以及使用(数据和方法事件的使用)

目录 1. 分类和简介 2. 公共组件 2.1 创建 2.2 注册 2.3 使用 3. 页面组件 3.1 创建 3.2 注册 3.3 使用 4. 组件的数据和方法的使用 4.1 组件数据的修改 4.2 方法事件的使用 1. 分类和简介 小程序目前已经支持组件化开发&#xff0c;可以将页面中的功能…

springboot基于spring boot的在线答题微信小程序

摘 要 在线答题微信小程序是考试中重要的一环&#xff0c;在线答题是学生获取任务信息的主要渠道。为了方便学生能够在网站上查看任务信息、考试&#xff0c;于是开发了基于 springboot框架设计与实现了一款简洁、轻便的在线答题微信小程序。本微信小程序解决了在线答题事务中的…

2.3 HTML5新增的常用标签

2.3.1 HTML5新增文档结构标签 在HTML5版本之前通常直接使用<div>标签进行网页整体布局&#xff0c;常见布局包括页眉、页脚、导航菜单和正文部分。为了区分文档结构中不同的<div>内容&#xff0c;一般会为其配上不同的id名称。例如&#xff1a; <div id"h…

FFmpeg转码参数说明及视频转码示例

-b : 设置音频或者视频的转码码率 -b:v 只设置视频码率 -b:a 只设置音频码率 -ab: 只设置音频码率, 默认码率大小为: 128k bit/s -g: 设置视频GOP大小,表示I帧之间的间隔,默认为12 -ar: 设置音频采样率,默认0 -ac: 设置音频通道数量 默认0 -bf: 设置连…

CTFHUB-web-信息泄漏

题目所在位置&#xff1a;技能树->web->信息泄漏 目录遍历 打开题目&#xff0c;我们进入的是这个页面 翻译过来就是 得到的信息就是&#xff1a;flag要在这些目录里面寻找&#xff0c;我们直接一个一个点开查看就行 发现得到一个flag.txt&#xff0c;点击打开得到flag …

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:UIExtensionComponent (系统接口))

UIExtensionComponent用于支持在本页面内嵌入其他应用提供的UI。展示的内容在另外一个进程中运行&#xff0c;本应用并不参与其中的布局和渲染。 通常用于有进程隔离诉求的模块化开发场景。 说明&#xff1a; 该组件从API Version 10开始支持。后续版本如有新增内容&#xff0…

【Java】List, Set, Queue, Map 区别?

目录 List, Set, Queue, Map 区别&#xff1f; Collection和Collections List ArrayList 和 Array区别&#xff1f; ArrayList与LinkedList区别? ArrayList 能添加null吗&#xff1f; ArrayList 插入和删除时间复杂度&#xff1f; LinkedList 插入和删除时间复杂度&…