【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、Lambda
        map.forEach((k,v) -> {
            System.out.println(k + " : " + v);
        });

        //4、迭代器 通过key的迭代器
        Set set = map.keySet();//拿出所有的key
        Iterator 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()——判断有没有下一个元素,因为集合如果拿空了会报错

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【PyTorch】成功解决ModuleNotFoundError: No module named ‘torch’

【PyTorch】成功解决ModuleNotFoundError: No module named ‘torch’ &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希…

Oracle19c静默部署

Oracle19c静默部署文档 下载地址 https://www.oracle.com/database/technologies/oracle-database-software-downloads.html#db_free 一、系统基础配置 1、创建用户和用户组 # 创建oinstall和dba用户组 groupadd oinstall groupadd dba# 创建Oracle用户 useradd -g oinstall…

一起学数据分析_3(模型建立与评估_1)

使用前面清洗好的数据来建立模型。使用自变量数据来预测是否存活&#xff08;因变量&#xff09;&#xff1f; &#xff08;根据问题特征&#xff0c;选择合适的算法&#xff09;算法选择路径&#xff1a; 1.切割训练集与测试集 import pandas as pd import numpy as np impo…

Linux第78步_使用原子整型操作来实现“互斥访问”共享资源

使用原子操作来实现“互斥访问”LED灯设备&#xff0c;目的是每次只允许一个应用程序使用LED灯。 1、创建MyAtomicLED目录 输入“cd /home/zgq/linux/Linux_Drivers/回车” 切换到“/home/zgq/linux/Linux_Drivers/”目录 输入“mkdir MyAtomicLED回车”&#xff0c;创建MyA…

【数据结构和算法初阶(C语言)】二叉树铺垫--栈帧的创建与销毁--细节全解

前言&#xff1a; 学习这么久以来&#xff0c;可能有很多疑问&#xff1a;局部变量怎么创建的&#xff1f;为什么局部变量的值是随机的&#xff1f;函数是怎么传参的&#xff1f;传参的顺序是怎么样的&#xff1f;形参和实参是什么样的关系&#xff1f;函数调用是怎么做的&…

App的测试,和传统软件测试有哪些区别?增加哪些方面的测试用例

从上图可知&#xff0c;测试人员所测项目占比中&#xff0c;App测试占比是最高的。 这就意味着学习期间&#xff0c;我们要花最多的精力去学App的各类测试。也意味着我们找工作前&#xff0c;就得知道&#xff0c;App的测试点是什么&#xff0c;App功能我们得会测试&#xff0…

CTF-SHOW-摆烂杯-电子取证

&#x1f36c; 博主介绍 博主介绍&#xff1a;大家好&#xff0c;我是 Mikey &#xff0c;很高兴认识大家~ 主攻&#xff1a;【应急响应】 【python】 【数字取证】【单机取证】【流量分析】【MISC】 &#x1f389;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff0…

JAVA实战开源项目:高校学院网站(Vue+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学院院系模块2.2 竞赛报名模块2.3 教育教学模块2.4 招生就业模块2.5 实时信息模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学院院系表3.2.2 竞赛报名表3.2.3 教育教学表3.2.4 招生就业表3.2.5 实时信息表 四、系…

数据结构课程设计实践--哈夫曼树

1.问题描述 2.需求分析 2.1 功能需求 设计一个哈夫曼的编/译码系统&#xff0c;实现下述功能&#xff1a; 初始化&#xff0c;从终端读入字符集大小n&#xff0c;以及n个字符和n个权值&#xff0c;建立哈夫曼树&#xff0c;并将它存于文件hfmTree中&#xff1b;编码&#xf…

RIPGeo参文33、37(最大化原始图与摄动图之间的一致性):保证不相关信息的消除

RIPGeo中有: 训练目标为: 由于需要准确的地理定位预测,损失鼓励图表示学习来保持IP地理定位的基本信号。同时,和通过最大化原始图与摄动图[33]、[37]之间的一致性,保证了不相关信息的消除。考虑到模型在训练早期的不稳定性,我们不直接同时优化多个训练目标。相反,我们采…

物联网竞赛板CubMx全部功能简洁配置汇总

目录 前言&#xff1a;1、按键&LED灯配置&#xff1a;2、OLED配置&#xff1a;3、继电器配置&#xff1a;4、LORA模块配置&#xff1a;5、矩阵模块&#xff1a;6、串口模块&#xff1a;7、RTC配置&#xff1a;8、ADC模块配置&#xff1a;9、温度传感器模块&#xff1a;后续…

3.Windows下安装MongoDB和Compass教程

Windows下安装MongoDB 总体体验下来&#xff0c;&#xff0c;要比MySQL的安装简单了许多&#xff0c;没有过多的配置&#xff0c;直接就上手了&#xff01; 1、下载 进入官方的下载页面https://www.mongodb.com/try/download/community&#xff0c;如下选择&#xff0c;我选…

【热门话题】前端框架发展史

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 前端开发的历史演变引言第一章&#xff1a;起源与基础建设 - HTML与CSS时代1.1 …

python 爬取人民新闻

基础信息获取&#xff1a; 要闻url&#xff1a;https://www.gov.cn/yaowen/liebiao/home.htm 下一页的url&#xff1a;https://www.gov.cn/yaowen/liebiao/home_1.htm 基础代码&#xff1a; import re import openpyxl import requests from lxml import etree import osdef …

MySQL 篇- Java 连接 MySQL 数据库并实现数据交互

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 JDBC 概述 2.0 实现 Java 连接 MySQL 数据库并实现数据交互的完整过程 2.1 安装数据库驱动包 2.2 创建数据源对象 2.3 获取数据库连接对象 2.4 创建 SQL 语句 2.…

基于Java+SpringMvc+vue+element实现驾校管理系统详细设计

基于JavaSpringMvcvueelement实现驾校管理系统详细设计 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末…

SQLiteC/C++接口详细介绍之sqlite3类(十二)

返回目录&#xff1a;SQLite—免费开源数据库系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;十一&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;十三&#xff09; ​37.sqlite3_load_extension 用于在SQLit…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Web)下篇

onRequestSelected onRequestSelected(callback: () > void) 当Web组件获得焦点时触发该回调。 示例&#xff1a; // xxx.ets import web_webview from ohos.web.webviewEntry Component struct WebComponent {controller: web_webview.WebviewController new web_webv…

如果要做优化,CSS提高性能的方法有哪些?

文章目录 一、前言二、实现方式内联首屏关键CSS异步加载CSS资源压缩合理使用选择器减少使用昂贵的属性不要使用import其他 三、总结参考文献 一、前言 每一个网页都离不开css&#xff0c;但是很多人又认为&#xff0c;css主要是用来完成页面布局的&#xff0c;像一些细节或者优…

苹果Vision Pro官方应用商店(网页版)正式上线

该网站为用户提供了丰富多样的应用资源,包括娱乐、教育、健康、购物、工具等各种类型的应用和游戏。 1、Apps & Games Arcade:提供各种应用和游戏,包括最新推出的、热门的以及专门为Apple Vision Pro设计的应用和游戏。 2、What’s New:展示最新推出的应用和游戏,让…