【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.hqwc.cn/news/544616.html

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

相关文章

【视频异常检测】Diversity-Measurable Anomaly Detection 论文阅读

Diversity-Measurable Anomaly Detection 论文阅读 Abstract1. Introduction2. Related Work3. Diversity-Measurable Anomaly Detection3.1. The framework3.2. Information compression module3.3. Pyramid deformation module3.4. Foreground-background selection3.5. Trai…

宜搭faas服务器报错Network response was not OK

[error] https://api.dingtalk.com/v1.0/yida/forms/instances? fetch error Error: Network response was not OK 不出意外的话肯定是请求代码的某个部分出了问题&#xff1a;其中formInstanceId和updateFormDataJson是业务的内容 我检查过是没问题的。appType和systemToken…

【二】【单片机】有关独立按键的实验

自定义延时函数Delay 分别用Delay.c文件存储Delay函数。用Delay.h声明Delay函数。每次将这两个文件复制到工程中&#xff0c;直接使用。 //Delay.c void Delay(unsigned int xms) //11.0592MHz {while(xms--){unsigned char i, j;i 2;j 199;do{while (--j);}…

VMware的安装和Ubuntu的配置安装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、linux是什么&#xff1f;二、基础知识虚拟机 三、安装VMware总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; Linux是一个功能…

第18节 动态规划一讲

1假设有排成一行的N个位置记为1~N&#xff0c;N一定大于或等于2 开始时机器人在其中的M位置上(M一定是1~N中的一个) 如果机器人来到1位置&#xff0c;那么下一步只能往右来到2位置&#xff1b; 如果机器人来到N位置&#xff0c;那么下一步只能往左来到N-1位置&#xff1b; 如果…

【LeetCode: 2684. 矩阵中移动的最大次数 + dfs】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

数据结构的概念大合集04(队列)

概念大合集04 1、队列1.1 队列的定义1.2队列的顺序存储1.2.1 顺序队1.2.2 顺序队的基本运算的基本思想1.2.3 顺序队的4要素的基本思想 1.3 环形队列1.3.1 环形队列的定义1.3.1 环形队列的实现 1.4 队列的链式存储1.4.1 链队1.4.2 链队的实现方式1.4.3 链队的4要素的基本思想 1.…

牛客网-SQL大厂面试题-1.各个视频的平均完播率

题目&#xff1a;各个视频的平均完播率 DROP TABLE IF EXISTS tb_user_video_log, tb_video_info; CREATE TABLE tb_user_video_log (id INT PRIMARY KEY AUTO_INCREMENT COMMENT 自增ID,uid INT NOT NULL COMMENT 用户ID,video_id INT NOT NULL COMMENT 视频ID,start_time dat…

智慧交通:构建智慧城市的重要一环

随着信息技术的飞速发展&#xff0c;智慧城市已成为现代城市发展的重要方向。作为智慧城市的重要组成部分&#xff0c;智慧交通以其高效、便捷、环保的特性&#xff0c;成为推动城市现代化进程的关键力量。本文将从智慧交通的概念、发展现状、面临挑战以及未来趋势等方面&#…

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

返回目录&#xff1a;SQLite—免费开源数据库系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;十四&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;十六&#xff09; 47.sqlite3_set_authorizer 用法&#xff…

快慢指针:妙解查找链表的中间结点问题

给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,5] 解释&#xff1a;链表只有一个中间结点&#xff0c;值为 3 。示…

HarmonyOS NEXT应用开发—Grid和List内拖拽交换子组件位置

介绍 本示例分别通过onItemDrop()和onDrop()回调&#xff0c;实现子组件在Grid和List中的子组件位置交换。 效果图预览 使用说明&#xff1a; 拖拽Grid中子组件&#xff0c;到目标Grid子组件位置&#xff0c;进行两者位置互换。拖拽List中子组件&#xff0c;到目标List子组件…