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

❤️ 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.rhkb.cn/news/161235.html

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

相关文章

lenovo联想笔记本ThinkPad系列T15p或P15v Gen3(21DA,21DB,21D8,21D9)原厂Win11系统镜像

下载链接&#xff1a;https://pan.baidu.com/s/1V4UXFhYZUNy2ZQ8u4x1AFg?pwdqz0s 系统自带指纹驱动、人脸识别驱动、显卡、声卡等所有驱动、出厂主题壁纸、Office办公软件、Lenovo联想电脑管家等预装程序 所需要工具&#xff1a;32G或以上的U盘 文件格式&#xff1a;ISO …

一篇文章带你搞定所有二叉树题型的递归思维(思路超详细)

文章目录 &#x1f380;前言&#xff1a;&#x1f3c5;先在开头总结一下&#xff0c;二叉树解题的思维模式分两类&#xff1a;&#x1f387;先解释一下“前序位置”&#xff0c;“后序位置”的意思&#x1f3e8;举一个简单的例子&#xff1a; &#x1fa80;下面通过两道例题&am…

从自动化到测开,测试人员逆袭之路从此起步

在当今竞争激烈的软件测试行业中&#xff0c;近期的招聘市场确实面临一些挑战。大量的求职者争相涌入岗位&#xff0c;许多热衷于功能测试的人士甚至难以找到理想的工作机会。更不幸的是&#xff0c;连自动化测试和性能测试这些专业领域也受到了测试开发人员的竞争压力。然而&a…

C# 图解教程 第5版 —— 第4章 类型、存储和变量

文章目录 4.1 C# 程序是一组类型声明4.2 类型是一种模板&#xff08;*&#xff09;4.3 实例化类型4.4 数据成员和函数成员4.5 预定义类型4.6 用户定义类型4.7 堆和栈&#xff08;*&#xff09;4.8 值类型和引用类型4.9 变量4.9.1 变量声明4.9.2 多变量声明&#xff08;*&#x…

模式植物背景基因集制作

一边学习&#xff0c;一边总结&#xff0c;一边分享&#xff01; 写在前面 关于GO背景基因集文件的制作&#xff0c;我们在很早以前也发过。近两天&#xff0c;自己在分析时候&#xff0c;也是被搞了头疼。想重新制作一份GO背景基因集&#xff0c;进行富集分析。但是结果&…

排序【七大排序】

文章目录 1. 排序的概念及引用1.1 排序的概念1.2 常见的排序算法 2. 常见排序算法的实现2.1 插入排序2.1.1基本思想&#xff1a;2.1.2 直接插入排序2.1.3 希尔排序( 缩小增量排序 ) 2.2 选择排序2.2.1基本思想&#xff1a;2.2.2 直接选择排序:2.2.3 堆排序 2.3 交换排序2.3.1冒…

uniapp小程序中给web-view页面添加授权弹窗(使用cover-view组件覆盖实现该功能)

效果图&#xff1a; web-view是承载网页的容器。会自动铺满整个小程序页面&#xff0c;个人类型的小程序暂不支持使用。 再看下面一个提示&#xff1a; 每个页面只能有一个 web-view&#xff0c;web-view 会自动铺满整个页面&#xff0c;并覆盖其他组件。 也就是说&#xff0c;…

云安全—云计算基础

0x00 前言 学习云安全&#xff0c;那么必然要对云计算相关的内容进行学习和了解&#xff0c;所以云安全会分为两个部分来进行&#xff0c;首先是云计算先关的内容。 0x01 云计算 广泛传播 云计算最早大范围传播是2006年&#xff0c;8月&#xff0c;在圣何塞【1】举办的SES&a…

七大排序 (9000字详解直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序)

一&#xff1a;排序的概念及引入 1.1 排序的概念 1.1 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在…

DITA-OT 4.0新特性 - PDF themes,定制PDF样式的新方法

随着DITA-OT 4.0的发布&#xff0c;它提供了一种新的定制PDF样式方法&#xff0c;这种方法就是PDF theme。这篇文章来聊一聊这种定制PDF输出的新方法和实验结果。 在进入PDF theme细节之前&#xff0c;为各位读者梳理一下DITA-OT将DITA和Markdown发布成PDF的几种方法。 - 1 …

element ui 下拉框 选择月份和天数

一、背景 目前做的管理系统项目&#xff0c;期望实现功能为&#xff1a;设置出账周期和出账日&#xff0c;考虑使用element ui下拉框实现功能 二、所用技术 vue2element ui 三、实现效果 四、具体代码 <template><popup-frame :title"批量设置出账日" …

OJ第四篇

文章目录 链表分割环形链表有效的括号 链表分割 链接: 链表分割 虽然这个题牛客网中只有C,但是无所谓&#xff0c;我们只要知道C是兼容C的就可以了 至于说这个题的思路&#xff0c;我们就弄两个链表&#xff0c;把小于x的结点放到一个链表中&#xff0c;剩下的放到另一个链表…

2023年10月工作经验及问题整理总结

目录 1.window自带的base64加密解密 2.ElementUI修改鼠标移动到表格的背景色 3.vscode保存时几万个eslint错误 4.Git 拉取Gitee仓库报错&#xff1a;“fatal: unable to access ": Failed to connect to 127.0.0.1 port 1080: Connection r... 4.1本地查看Git是否使用…

Java版本spring cloud + spring boot企业电子招投标系统源代码

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及审…

spark stream入门案例:netcat准实时处理wordCount(scala 编程)

目录 案例需求 代码 结果 解析 案例需求&#xff1a; 使用netcat工具向9999端口不断的发送数据&#xff0c;通过SparkStreaming读取端口数据并统计不同单词出现的次数 -- 1. Spark从socket中获取数据&#xff1a;一行一行的获取 -- 2. Driver程序执行时&#xff0c…

加固数据安全:Java助力保护Excel文件,让数据无懈可击

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 Excel文件保护是常用的一种功能&#xff0c;文件保护主要有三种&#xff1a; 添…

单目3D自动标注

这里介绍两种 1. 基于SAM的点云标注 Seal&#xff1a;是一个多功能的自监督学习框架&#xff0c;能够通过利用视觉基础模型的现成知识和2D-3D的时空约束分割自动驾驶数据集点云 Scalability&#xff1a;可拓展性强&#xff0c;视觉基础模型蒸馏到点云中&#xff0c;避免2D和…

SaaS人力资源管理系统的Bug

SaaS人力资源管理系统的Bug Bug1【18】 这里我是直接把代码复制过来的&#xff0c;然后就有一个空白 这是因为它的代码有问题&#xff0c;原本的代码如下所示 <el-table-column fixed type"index" label"序号" width"50"></el-table…

Linux性能优化--性能追踪:受CPU限制的应用程序(GIMP)

10.0 概述 本章包含了一个例子&#xff1a;如何用Linux性能工具在受CPU限制的应用程序中寻找并修复性能问题。 阅读本章后&#xff0c;你将能够&#xff1a; 在受CPU限制的应用程序中明确所有的CPU被哪些源代码行使用。用1trace和oprofile弄清楚应用程序调用各种内部与外部函…

KNN-近邻算法 及 模型的选择与调优(facebook签到地点预测)

什么是K-近邻算法&#xff08;K Nearest Neighbors&#xff09; 1、K-近邻算法(KNN) 1.1 定义 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别&#xff0c;则该样本也属于这个类别。 来源&#xff1a;KNN算法最早是由Cover和Hart提…