学点儿Java_Day10_集合框架(List、Set、HashMap)

news/2024/5/14 19:58:40

1 简介

在这里插入图片描述
在这里插入图片描述

ArrayList: 有序(放进去顺序和拿出来顺序一致),可重复
HashSet: 无序(放进去顺序和拿出来顺序不一定一致),不可重复

	@Testpublic void test1() {String[] array = new String[3];//List: 有序 可重复//有序: 放入顺序 与  拿出顺序一致,就是有序
//        List<String> list = new ArrayList<>();//多态 声明成父类, new子类类型ArrayList<String> list = new ArrayList<>();list.add("Java");list.add("UI");list.add("H5");list.add("H5");list.add("Python");list.add("aa");for (String str : list) {System.out.println(str);}System.out.println("------------------");//Set:无序 不重复//无序: 放入顺序与拿出顺序不一定一致,可能不一致HashSet<String> set = new HashSet<>();
//        Set<String> set = new HashSet<>();//多态, 声明成父类, new子类类型set.add("Java");set.add("UI");set.add("H5");set.add("H5");set.add("aa");for (String str : set) {System.out.println(str);}}

2 ArrayList和LinkedList区别

在这里插入图片描述
ArrayList和LinkedList的大致区别如下:
1.ArrayList是实现了基于动态数组的数据结构LinkedList基于链表的数据结构
2.对于随机访问get和set,ArrayList绝对优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

ArrayList内部是使用可増长数组实现的,所以是用get和set方法是花费常数时间的,但是如果插入元素和删除元素,除非插入和删除的位置都在表末尾,否则代码开销会很大,因为里面需要数组的移动
LinkedList是使用双链表实现的,所以get会非常消耗资源,除非位置离头部很近。但是插入和删除元素花费常数时间。

jdk1.7版本之前创建集合对象必须把前后的泛型都写上
ArrayList<String> list = new ArrayList<String>();
jdk1.7版本之后,=号后面的泛型可以省略,后面的泛型可以根据前面的泛型推导出来
ArrayList<String> list = new ArrayList<>();

3 队列

Queue先进先出 FIFO Firt In First Out
客服电话、12306排队买票、滴滴打车
在这里插入图片描述

LinkedList linkedList = new LinkedList();
linkedList.addFirst("A");
linkedList.removeFirst();
linkedList.addLast("B");
linkedList.removeLast();

基于LinkedList的addFirst()removeFirst()addLast()removeLast()方法可以实现队列两种数据结构

4 Map

在这里插入图片描述
Set<Entry<String, String>> set = map.entrySet();
map.keySet();

Map接口
1、Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。
2、Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。
3、Collection中的集合称为单列集合,Map中的集合称为双列集合
4、需要注意的是,Map中的集合不能包含重复的键,值可以重复每个键只能对应一个值
5、Map中常用的集合为HashMap集合、LinkedHashMap集合。

Map集合遍历键找值方式:

一、键找值方式:即通过元素中的键,获取键所对应的值
1.获取Map集合中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键
在这里插入图片描述

2.遍历键的Set集合,得到每一个键
3.根据键,获取键所对应的值
在这里插入图片描述

二、Map集合遍历键值对方式
键值对方式:即通过集合中每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值。
操作步骤与图解:
1.获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。
在这里插入图片描述

2.遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象
3.通过键值对(Entry)对象,获取Entry对象中的键与值。
在这里插入图片描述
在这里插入图片描述

	@Testpublic void test2() {//Map<String, String> map = new HashMap<>();//多态, 声明成父类, new子类类型HashMap<String, String> map = new HashMap<>();//HashMap不是接口map.put("CN", "中国");map.put("US", "美国");map.put("UK", "英国");Set<Map.Entry<String, String>> set = map.entrySet();//entry Set集合//① 遍历map 转为遍历setfor (Map.Entry<String, String> entry : set) {System.out.println(entry.getKey() + ": " + entry.getValue());//放入顺序和拿出顺序不一定一样}System.out.println("-----------------");//②String country = map.get("CN");System.out.println(country);System.out.println("-----------------");//key不能重//② 根据key遍历Set<String> ketSet = map.keySet();for (String key : ketSet) {System.out.println(key + ": " + map.get(key));}}

注意:Map集合不能直接使用迭代器或者foreach进行遍历。但是转成Set之后就可以使用了

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

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

相关文章

跟着cherno手搓游戏引擎【29】Batch简单合批

思路&#xff1a; CPU和GPU都开辟同样大小的一大块内存&#xff08;为了存储顶点信息&#xff09; 索引在程序运行时生成对应规则后绑定到索引缓冲中 动态生成顶点信息&#xff08;现在改成Drawquad只是确定图形顶点的位置&#xff09; 然后在Endscene&#xff0c;将CPU的动…

【动态规划】【数学方法】Leetcode 343. 整数拆分

【动态规划】【数学方法】Leetcode 343. 整数拆分 解法 动态规划解法 数学 每次拆成n个3&#xff0c;如果剩下是4&#xff0c;则保留4&#xff0c;然后相乘 ---------------&#x1f388;&#x1f388;343. 整数拆分 题目链接&#x1f388;&#x1f388;------------------- …

如何通过vscode连接到wsl

下载wsl扩展 远程连接模式

最新2024年增强现实(AR)营销指南(完整版)

AR营销是新的最好的东西&#xff0c;就像元宇宙和VR营销一样。利用AR技术开展营销活动可以带来广泛的利润优势。更不用说&#xff0c;客户也喜欢AR营销&#xff01; 如果企业使用AR&#xff0c;71%的买家会更多地购物。40%的购物者准备在他们可以在AR定制的产品上花更多的钱。…

通过Caliper进行压力测试程序,且汇总压力测试问题解决

环境要求 第一步. 配置基本环境 部署Caliper的计算机需要有外网权限;操作系统版本需要满足以下要求:Ubuntu >= 16.04、CentOS >= 7或MacOS >= 10.14;部署Caliper的计算机需要安装有以下软件:python 2.7、make、g++(gcc-c++)、gcc及git。第二步. 安装NodeJS # …

STM32看似无法唤醒的一种异常现象分析

1. 引言 STM32 G0 系列产品具有丰富的外设和强大的处理性能以及良好的低功耗特性&#xff0c;被广泛用于各类工业产品中&#xff0c;包括一些需要低功耗需求的应用。 2. 问题描述 用户使用 STM32G0B1 作为汽车多媒体音响控制器的控制芯片&#xff0c;用来作为收音机频道存贮…