【JAVA】集合与背后的逻辑框架,包装类,List,Map,Set,静态内部类

news2024/11/26 9:53:48

❤️ Author: 老九
☕️ 个人博客:老九的CSDN博客
🙏 个人名言:不可控之事 乐观面对
😍 系列专栏:

文章目录

  • collection
    • Collection创建
    • collection使用泛型
    • collection方法
  • Map 接口
    • Map的存储结构
    • HashMap和TreeMap的有序和无序
  • 包装类
    • 装箱与拆箱(装包与拆包)
  • LIst
    • List使用
    • List的多种输出方式
      • 直接通过字符串输出
      • 通过for循环打印
      • 通过foreach输出
      • 通过迭代器打印
    • List的API
      • add
      • 通过增加一个参数index的add方法
      • 把一个 List 放在另一个 List 后面
      • 删除某个值
      • 获取某个下标的值
      • 更改某个位置的值
      • 清空List
  • Map的API
    • put
    • get
    • getOrDefault
    • remove
  • Set的API
    • set 自动去重
    • contains是否包含
    • remove删除
    • isEmpty()判空
    • clear()清空
  • 静态内部类

collection

在这里插入图片描述

Collection 接口,在 Java 当中,Collection 也是重要的数据结构。

Collection创建

在创建 Collection 的时候,要通过 new 关键字来使用。但是查看 Collection 源码的时候,发现 Collecting 是一个接口
在这里插入图片描述
**因为接口是不能实例化的,所以 new 的时候,要用一个具体的类。**这里用ArrayList来举例:

Collection collection = new ArrayList();

collection使用泛型

使用泛型就是加上 <> 里面写元素类型,要注意的是,这里的类型全是包装类。字符串的包装类是:String 整形的包装类是:Integer 。写了包装类的话,add 的时候就只能添加这一类型:

public static void main(String[] args) {
    Collection<String> collection = new ArrayList<String>();
    collection.add("hello");
    collection.add("word");
    System.out.println(collection);
}

Collection 后面的 String 可以不写,因为不写的话,编译器会通过前面的 String 来推导出相应的类型。如果这里 add 非字符类型的话,就会报错。运行结果如下:
在这里插入图片描述

collection方法

Collection 里面有很多自带的方法:
在这里插入图片描述
使用代码测试:

public static void main(String[] args) {
    Collection<String> collection = new ArrayList<>();
    collection.add("hello");
    collection.add("word");
    System.out.println(collection);
    System.out.println(collection.size());
    System.out.println(collection.isEmpty());
    collection.remove("word");
    System.out.println(collection);
    Object[] objects = collection.toArray();
    System.out.println(Arrays.toString(objects));
    System.out.println(objects);
}

在这里插入图片描述

Map 接口

Map 是在 util 包下的接口。Map 有两个参数 <key,val> ,而且这两个参数必须是字符串。实现 Map 的方法 有HashMap 和 TreeMap 。Map 的基本功能如下
在这里插入图片描述

public static void main(String[] args) {
    Map<String,String> map = new HashMap<>();
    map.put("Lockey","鲁班锁");
    map.put("及时雨","宋江");
    String ret = map.get("及时雨");
    String tmp = map.getOrDefault("及时雨1","FM850");
    System.out.println(ret);
    System.out.println(tmp);
    boolean flag = map.containsKey("Lockey");
    System.out.println(flag);
}

在这里插入图片描述

Map的存储结构

  • map在存储的时候,并不是顺序存储的,而是通过映射去存储的。代码示例:
public static void main(String[] args) {
    Map<String,String> map = new HashMap<>();
    map.put("及时雨","宋江");
    map.put("Lockey","鲁班锁");
    System.out.println(map);
}

先输出 “Lockey” 然后才是 “及时雨” 。
在这里插入图片描述

HashMap和TreeMap的有序和无序

  • HashMap存储的时候是根据key值排序的,是有序的。
  • TreeMap放入的时候没有进行比较,没有排序。
public static void main(String[] args) {
    Map<Integer,String> map = new HashMap<>();
    map.put(10,"宋江");
    map.put(3,"鲁班锁");
    System.out.println(map);
    Map<String,String> map2 = new HashMap<>();
    map2.put("efg","宋江");
    map2.put("abc","鲁班锁");
    System.out.println(map2);
    Map<String,String> map3 = new TreeMap<>();
    map3.put("及时雨","宋江");
    map3.put("国民女神","鲁班锁");
    System.out.println(map3);
    Map<String,String> map4 = new HashMap<>();
    map4.put("及时雨","宋江");
    map4.put("国民女神","鲁班锁");
    System.out.println(map4);
}

在这里插入图片描述

包装类

包装类是根据基本类型出现的,八大基本类型对应着八种包装类:
在这里插入图片描述
要注意的是:String 不是包装类。**包装类的好处在于:可以完成对数据的操作。**例如:把字符串变为整形:

public static void main(String[] args) {
    String str = "123";
    int ret = Integer.valueOf(str);
    System.out.println(ret+1);
}

在这里插入图片描述

装箱与拆箱(装包与拆包)

装箱:把简单数据类型变为包装类类型
拆箱:把包装类类型变为简单数据类型

代码示例,这里是隐式的:

public static void main(String[] args) {
    //装箱
    Integer a = 123;
    //拆箱
    int b = a;//隐式的:因为把 Integer 变为 int 了
    System.out.println(a+"   "+b);
}

在这里插入图片描述
下面我们通过 powershell 窗口来看编译的过程:
在这里插入图片描述
可以看到,画圈的部分就是两次过程。第一次是通过 Integer 的 valueOf 来把 123 变成 Integer 类。第二次则是通过 Integer 的 intValue 来变成 int 类型。下面的就是字符串的拼接了。
显式拆包:
通过直接将方法写出来,一看就明白了的方法就是显式的:

public static void main(String[] args) {
    //这里就是显式的装包
    Integer a2 = Integer.valueOf(123);
    Integer a3 = new Integer(123);
    //显式的拆包
    int b2 = a2.intValue();
    double d = a2.doubleValue();
}

LIst

List使用

在使用 List 的时候,后面括号可以加参数,也可以不加参数,加的参数是表示容量大小:

public static void main(String[] args) {
    List<String> list1 = new ArrayList<>(20);
    List<String> list2 = new ArrayList<>();
}

List 是一个很大的类,这里用它下层的 ArrayList :

public static void main(String[] args) {
    ArrayList<String> list2 = new ArrayList<>();
    list2.add("hello");
    list2.add("word");
    list2.add("123");
    System.out.println(list2);
    ArrayList<String> list3 = new ArrayList<>(list2);
    System.out.println(list3);
}

在这里插入图片描述
可以使用另外一个 Array List 对 list 初始化:这里的 list3 就是用 list2 来进行初始化。

List的多种输出方式

直接通过字符串输出

public static void main(String[] args) {
    ArrayList<String> list2 = new ArrayList<>();
    list2.add("hello");
    list2.add("word");
    list2.add("123");
    System.out.println(list2);
}

在这里插入图片描述

通过for循环打印

- 用size()获取长度,用add()添加,用get(int)获取

public static void main(String[] args) {
    ArrayList<String> list2 = new ArrayList<>();
    list2.add("hello");
    list2.add("word");
    list2.add("123");
    for (int i = 0; i < list2.size(); i++){
        System.out.println(list2.get(i));
    }
}

在这里插入图片描述

通过foreach输出

public static void main(String[] args) {
    ArrayList<String> list2 = new ArrayList<>();
    list2.add("hello");
    list2.add("word");
    list2.add("123");
    for (String s:list2) {
        System.out.println(s);
    }
}

在这里插入图片描述

通过迭代器打印

  • 通过使用List的方法:iterator()来完成输出
public static void main(String[] args) {
    ArrayList<String> list2 = new ArrayList<>();
    list2.add("hello");
    list2.add("word");
    list2.add("123");
    System.out.println("迭代器打印");
    Iterator<String> i = list2.iterator();
    while (i.hasNext()) {
        System.out.println(i.next());
    }
}

在这里插入图片描述

List的API

add

List 当中的 add 方法,默认是放在最后一个位置的:

public static void main(String[] args) {
    //add 方法 默认是放到数组的最后一个位置的
    ArrayList<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
    System.out.println(list);
}

在这里插入图片描述

通过增加一个参数index的add方法

通过在 add 方法放第一次参数,将元素放到某个位置下面:

public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
    System.out.println(list);
    list.add(0,"Lockey");
    System.out.println(list);
}

在这里插入图片描述

把一个 List 放在另一个 List 后面

通过 List 的方法 addALL 来完成,代码如下:

public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
    System.out.println(list);
    ArrayList<String> list1 = new ArrayList<>();
    list1.add("qwe");
    list1.add("rty");
    list1.addAll(list);
    System.out.println(list1);
}

在这里插入图片描述

删除某个值

通过 remove 方法来完成删除:

public static void main9(String[] args) {
    ArrayList<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
    System.out.println(list);
    boolean flag = list.remove("a");
    System.out.println(flag);
    System.out.println(list);
}

在这里插入图片描述

获取某个下标的值

通过 get 方法来完成获取:

public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
    String ret = list.get(1);
    System.out.println(ret);
}

在这里插入图片描述

更改某个位置的值

通过 set 方法来完成:

public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
    list.set(1,"d");
    System.out.println(list);
}

在这里插入图片描述

清空List

通过 clear 方法来完成:

public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
    list.clear();
    System.out.println(list);
}

在这里插入图片描述

Map的API

map 和 set 是一种专门用来搜索和查询的容器或数据结构,效率很高。是为了解决在 “增删查改” 情况下使用的数据结构。
HashMap 在存储元素的时候,是根据一个函数进行存储的,具体存储到哪里,由函数来确定。这个函数就是哈希函数。所以输出的时候,并不是按照存储顺序进行输出的。Map是一个接口类,没有继承自Collection,类中存储的是 <K,V> 结构的键值对,并且 K 一定是唯一的,不能重复。在遇到相同的 K 的时候,V 是可以改变的。

put

在 map 当中,put 是放入元素的意思,有两个参数,第一个是 key ,第二个是 value ,代码如下:

public static void main(String[] args) {
    Map<String, Integer> map = new HashMap<>();
    map.put("abc",3);
    map.put("word",2);
    map.put("hello",4);
    System.out.println(map);
}

在这里插入图片描述
输出的时候按照key值从大到小输出。
put 如果存储元素的时候,如果 key 值相同的话,val 值会覆盖。代码如下:

public static void main(String[] args) {
    Map<String, Integer> map = new HashMap<>();
    map.put("abc",3);
    map.put("word",2);
    map.put("hello",4);
    map.put("abc",5);
    System.out.println(map);
}

在这里插入图片描述

get

使用 get 通过 key 来获取对应的 value 的值。代码如下:

public static void main(String[] args) {
    Map<String, Integer> map = new HashMap<>();
    map.put("abc",3);
    map.put("word",2);
    map.put("hello",4);
    int ret = map.get("abc");
    System.out.println(ret);
}

在这里插入图片描述

getOrDefault

getOrDefault 方法有两个参数,一个是 key ,如果没有 key 的话,就返回设置的默认值。如果有 key 的话,就返回 key 的 value 。代码如下:

public static void main(String[] args) {
    Map<String, Integer> map = new HashMap<>();
    map.put("abc",3);
    map.put("word",2);
    map.put("hello",4);
    System.out.println(map.getOrDefault("abc",98));
}

因为 abc 存在,所以返回 abc 的 value 。就是 3 。
在这里插入图片描述

remove

remove 方法有一个参数,参数是输入的 key ,返回对应的 value 。如果没有 key 的话,就返回 null 。代码如下:

public static void main(String[] args) {
    Map<String, Integer> map = new HashMap<>();
    map.put("abc",3);
    map.put("word",2);
    map.put("hello",4);
    Integer ret2 = map.remove("abc");
    System.out.println(ret2);
}

在这里插入图片描述

Set的API

set 是一个集合,存入里面的数据会自动去重。Set 是继承自 Collection 的接口类,Set 中只存储了 Key 。

set 自动去重

放入 set 的数据会自动去重,代码如下:

public static void main4(String[] args) {
    Set<Integer> set = new HashSet<>();
    set.add(1);
    set.add(2);
    set.add(3);
    set.add(1);
    System.out.println(set);
}

在这里插入图片描述

contains是否包含

remove删除

isEmpty()判空

clear()清空

静态内部类

1.外部类可通过内部类的对象调用内部类的私有成员变量或方法。
2.静态内部类访问外部类的静态成员变量或方法必须是静态的。


♥♥♥码字不易,大家的支持就是我坚持下去的动力♥♥♥
版权声明:本文为CSDN博主「亚太地区百大最帅面孔第101名」的原创文章

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

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

相关文章

crontab报错/var/spool/cron : Permission denied和 -bash: chattr: command not found

crontab报错/var/spool/cron : Permission denied和 -bash: chattr: command not found 1、第一种情况2、第二种情况3、第三种情况 1、第一种情况 centos7下修改定时任务crontab -e的时候&#xff0c;控制台输出“crontab: installing new crontab”&#xff0c;表示任务添加成…

保障通航桥梁安全,创新边缘计算技术助力桥梁主动防撞预警系统

一、需求分析 随着公路、铁路等交通基础设施建设&#xff0c;公路桥梁数量及里程也在近20年内迅猛发展&#xff0c;2000-2020年&#xff0c;公路桥梁数量从24.06万座增加到91.28万座&#xff0c;年均增长6.89%。此外&#xff0c;长三角、珠三角等地区还有大量跨江、跨河…

机器人控制算法综述

随着机器人技术的不断进步&#xff0c;机器人控制算法也越来越复杂和精细。机器人控制算法的研究是机器人技术发展的关键之一。本文将综述机器人控制算法的研究现状&#xff0c;主要包括传统控制算法、现代控制算法、智能控制算法三个方面。 一、传统控制算法 传统控制算法是机…

Mac M1运行、连接 Docker MongoDB7。导出、恢复数据库

MongoDB&#xff0c;版本5、6.02、7.02适用 记录两种使用MongoDB的方法&#xff0c;本地安装包和docker 本地安装包方法&#xff1a;Mac M1安装MongoDB6、后台运行 Docker Mongo 一、docker运行MongoDB&#xff0c;并设置用户名密码 可以在创建容器的时候指定root用户名密码…

ChatGPT角色扮演教程,Prompt词分享

使用指南 1、可直复制使用 2、可以前往已经添加好Prompt预设的AI系统测试使用 https://ai.idcyli.comhttps://ai.idcyli.com 雅思写作考官 我希望你假定自己是雅思写作考官&#xff0c;根据雅思评判标准&#xff0c;按我给你的雅思考题和对应答案给我评分&#xff0c;并且按…

【软件测试】Requests库中处理cookie的几种方式

前言 发送请求时经常需要利用请求头中的cookie字段来做用户访问状态的保持&#xff0c;关于的cookie的处理常见有下面一些处理方式&#xff0c;这里做个小小的总结 1.直接在请求中传递cookies参数 import requestshost http://119.91.144.93:82 api r/ecshop/user.php url…

一文深入理解高并发服务器性能优化

我们现在已经搞定了 C10K并发连接问题 &#xff0c;升级一下&#xff0c;如何支持千万级的并发连接&#xff1f;你可能说&#xff0c;这不可能。你说错了&#xff0c;现在的系统可以支持千万级的并发连接&#xff0c;只不过所使用的那些激进的技术&#xff0c;并不为人所熟悉。…

Electron基础学习笔记

Electron基础学习笔记 官网&#xff1a; https://www.electronjs.org/ 文档&#xff1a;https://www.electronjs.org/zh/docs/latest/ Electon概述 Electron 是由 Github开发的开源框架它允许开发者使用Web技术构建跨平台的桌面应用 Electron Chromium Node.js Native AP…

基于IDEA 配置Maven环境和JDK版本(全局)

1.首先启动IDEA&#xff0c;进去初始界面 选择 Customize 之后&#xff0c;选择 All settings 2. 选择下图中的列表配置 3. 找到Maven下的Runner, 配置JRE的版本&#xff0c;选择自己下载使用的jdk的版本即可 4.最后配置Compiler 下的 Java Compiler 选择自己的jdk版本号&am…

将Excel表中数据导入MySQL数据库

1、准备好Excel表&#xff1a; 2、数据库建表case2 字段信息与表格对应建表&#xff1a; 3、实现代码 import pymysql import pandas as pd import openpyxl 从excel表里读取数据后&#xff0c;再存入到mysql数据库。 需要安装openpyxl pip install openpyxl# 读入数据&#x…

构建智能工厂设施的“智能电机保护和信息监控解决方案”

施耐德电气新推出了“智能电机保护与信息监控解决方案”&#xff0c;这是一个智能工厂设施建设和数字化的集成解决方案包。 进入数字化转型时代&#xff0c;行业最大的话题无疑是“智能工厂”。 智能工厂的字面意思是“真正的智能工厂”。 是指通过物联网&#xff08;IoT&…

【每日一句】只出现一次的数

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;位运算 其他语言Cpython3 写在最后 Tag 【位运算-异或和】【数组】【2023-10-14】 题目来源 136. 只出现一次的数字 题目解读 给你一个数组&#xff0c;找出数组中只出现一次的元素。题目保证仅有一个元素出现一次&a…

ChatGPT,AIGC 制作按年份选择的动态条形图

在数据分析与可视化中,条形图是用来进行对比分析,在正负条形图中都有哪些好处与优点呢? 正负条形图是一种常用的数据可视化方式,它的优点和好处包括: 1.明确展示:正负条形图可以清晰地显示出数据中的正负差异,使读者能直观地看出数据的变化和趋势。 2.直观比较:正负条…

【设计模式】十、组合模式

文章目录 案例组合模式基本介绍类图代码 组合模式在 JDK 集合的源码分析组合模式的注意事项和细节 案例 编写程序展示一个学校院系结构&#xff1a;需求是这样&#xff0c;要在一个页面中展示出学校的院系组成&#xff0c;一个学校有多个学院&#xff0c;一个学院有多个系。如…

Unity 3D基础——计算两个物体之间的距离

1.在场景中新建两个 Cube 立方体&#xff0c;在 Scene 视图中将两个 Cude的位置错开。 2.新建 C# 脚本 Distance.cs&#xff08;写完记得保存&#xff09; using System.Collections; using System.Collections.Generic; using UnityEngine;public class Distance : MonoBehav…

RISC-V 特权级架构

特权级别 级别的数值越大&#xff0c;特权级越高&#xff0c;掌控硬件的能力越强&#xff0c;在CPU硬件层面&#xff0c;M模式必须存在&#xff0c;其它模式可以不存在 执行环境调用 ecall &#xff0c;这是一种很特殊的陷入类的指令&#xff0c; 相邻两特权级软件之间的接口正…

从零开始学习调用百度地图网页API:一、注册百度地图账号

目录 注册账号申请AK 注册账号 https://lbsyun.baidu.com/index.php?titlejspopular3.0/guide/getkey JavaScript API只支持浏览器类型的ak 申请AK 注&#xff1a;使用示例时&#xff0c;需要在百度地图示例加上https:&#xff0c;替换ak。

UE4 顶点网格动画播放后渲染模糊问题

问题描述&#xff1a;ABC格式的顶点网格动画播放结束后&#xff0c;改模型看起来显得很模糊有抖动的样子 解决办法&#xff1a;关闭逐骨骼动态模糊

python+opencv+机器学习车牌识别 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于机器学习的车牌识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;3分 该项目较为新颖&#xff0c;适…

Excel——对其他工作表和工作簿的引用

一、引用其他sheet页表区域 若希望在公式中引用其他工作表的单元格区域&#xff0c;可以在公式编辑状态下&#xff0c;通过鼠标单击相应的工作表标签&#xff0c;然后选择相应的单元格区域。 例1 跨sheet页引用其他工作表区域 如图1所示的工作表Sheet2为工资表。 在Sheet1表…