java学习--集合(大写一.1)

看尚硅谷视频做的笔记

1.集合框架概述

1.1生活中的容器

首先知道集合是来解决什么问题的?
在这里插入图片描述

1.1.1内存层面需要针对于多个数据进行存储,此时,可以考虑的容器有:数组、集合类

对于内存层面的来说,断电后数据就不复存在,内存层面的数据都是一些临时性处理的数据。跟数据库的数据不是一个维度。
在这里插入图片描述

就相当于数据是先从数据库读到内存中,数据库的数据可以用数组去存、也可以用集合去存储。
在这里插入图片描述

1.2 数组的特点、弊端

1.2.1数组存储多个数据方面的特点

①数组一旦初始化,长度就确定了。
②存储的数据有相关特点:依次紧密排列,并且是有序、可重复的
③优点:数组一旦初始化完成,其元素的的类型就是确定的,不是此类型的元素,就不能添加到此数组中。

声明int类型,就只能是int类型,声明是String类型,就只能是String类型

在这里插入图片描述

int [ ] arr=new int[10];
arr[0]=1;
arr[1]=‘AA’//编译报错;
在这里插入图片描述
在这里插入图片描述
想体现更灵活的用户,就声明为Object类型数组
Object obj=new Object[];
obj[0]=‘AA’;
obj[1]=1;
obj[2]=new String();
obj[3]=new Date();
在这里插入图片描述
在这里插入图片描述

④优点:元素的类型即可以是基本数据类型,也可以引用数据类型。

集合中的元素存放只能是基本数据类型,不能是引用数据类型。若你集合中有基本类型的需求那只能用包装类的对象往里放,就只能放对象特征。
对集合来讲,其实对类型没有什么要求,可以随便往里放数据类型。不会对类型进行检查,这样就会使得容器里的东西比较杂,不安全,怎么办?下一章会讲1泛型,性新特性。泛型就专门限制往集合里放的类型。
泛型类型,写的是String,就只往里放String,其他类型就放不进去。
泛型就可以达到跟数组一样的特征。

在这里插入图片描述

1.2.2数组存储多个数据方面的弊端

①数组一旦初始化,长度就不可变了。

在这里插入图片描述
数组new的时候在堆空间是一整块空间

在这里插入图片描述
1和1就可以看成是可以重复的
在这里插入图片描述

在这里插入图片描述

②数组中存储数据特点的单一性、对于无序、不可重复的常见的多个数据就无能为力了
③数组中可用的方法、属性都极少,具体的需求,都需要自己组织相关的代码逻辑。

在这里插入图片描述

④针对于数组中的元素的删除、插入操作、性能较差,原因是因为:存储的数据、依次紧密排列,

在这里插入图片描述

1.3Java集合框架体系

在这里插入图片描述

这章整体是从接口体系出发的
像之前讲异常体系都是从类出发threable \errable\exception

比较典型的接口有两个:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3.1 java.util.Collection接口:存储一个一个的数据

在这里插入图片描述

①------List子接口:有序可以重复的数据
List子接口下面具体的实现类:ArrayList(主要的实现类)、LinkedList、Vector
②------Set子接口:无序不可重复的数据
Set子接口下面具体的实现类:HashSet(主要的实现类)、LinkedHashSet、TreeSet

1.3.2 java.util.Map接口:存储一对一对的数据(key-value,一个key对应一个value,键值对数据)

在这里插入图片描述

一个x1对应一个y1,一个x2对应一个y2,综合就相当于是函数y=f(x)

Map会有针对于key、value的要求,不同的key可以指向同一个value,一个key不能指向多个value
y=x ^2

x=-1,x=1,y=1

Map这里也是一样,不同key可以指向同一个value,同一个key不能指向多个value

在这里插入图片描述在这里插入图片描述
跟Collection并列的接口Map,Map没有子接口

①直接提供的具体的实现类HashMap(主要的实现类)、LinkedHashMap、TreeMap、Hashtable、Properties

HashSet的底层就是HashMap
LinkedHashSet的底层是LinkedHashMap
TreeSet的底层是TreeMap
在这里插入图片描述
在这里插入图片描述

1.3.3怎么理解List存储有序可以重复的数据?

List跟前面的数组有些类似:称为动态数组,可以动态扩展底层数组的长度。
其实List就可以替换以前的数组,具体用的话就是实现类,ArrayList是作为主要的实现类

在这里插入图片描述

我们要做的就是具体的实现类是谁,怎么创建对象?怎么用常用的方法完成项目的需求

1.4集合的使用场景

1.4.1无序不可重复的使用场景:黑名单、手机骚扰电话拦截

黑名单其实就是一个Set集合,加进黑名单后,就没有必要再加一份

在这里插入图片描述
红色圈住的都是可以理解为对象,这里面就有多个对象,多个对象就考虑容器去装,上下是有顺序讲究,以前是数组,现在可以用集合List实现类,ArrayList去装数据即可
在这里插入图片描述
这一项可以用对象去封装数据,也可以不用对象去封装,可以用一个Map容器
Map容器是一个键值对
在这里插入图片描述
下面圈住的红色结构
里面都是key,key可以理解成一个标签
在这里插入图片描述
key在这里是image,imagepath对应的是url地址,即就是键值
多个Map构成List
在这里插入图片描述
安卓或者pc客户端发送请求到服务端,服务端可以用java代码去编写逻辑,java可以去访问数据库
数据库返回的是数据是结果集给java层面的代码最后再响应给客户端即就是看到的页面数据
本质上页面的数据都是来自数据库,java的作用就是根据用户的个性化请求访问数据库返回给客户端,在服务器的层面写的都是java代码,针对于数据可以使用List、Map进行去装数据,至于返回到客户端是什么样的格式,暂时不多说。
在这里插入图片描述

1.5学习的程度把握

1.5.1 层次一:针对于具体特点的多个数据,知道选择相应的适合的接口主要实现类,会实例化,会调用常用的方法。

在这里插入图片描述

1.5.2 层次二:区分接口中不同的实现类的区别

在这里插入图片描述

1.5.3 层次三:①针对于常用的实现类,需要熟悉底层源码。②熟悉常见的数据结构(第14章讲)

后面就先讲Collection,再讲Map
在这里插入图片描述

2.collection接口及方法

jdk8里有一些默认的方法,更多的是体现的是一种规范,规范更多关注的是一些抽象方法。
看接口里面的抽象方法,选一个具体的实现类。
测试collection的方法,存储一个一个数据都有哪些功能方法可以进行调。
因为是接口,想演示接口中的方法,就需要先声明Collection
在这里插入图片描述

右边一定要选一个实现类,即就用ArrayList
此处就使用了多态
在这里插入图片描述

多态
场景时调的时候.
coll.时候只能调出Collection接口里面声明的方法
在这里插入图片描述
所以借着右边ArrayList看左边Collection接口的方法
具体执行还是右边ArrayList中的方法,那右边执行方法就等于左边Collection方法吗?(虽然接口中的方法么没有方法体,方法的用途是确定的,所以此处不影响去理解Collection接口中的方法)
在这里插入图片描述
COllection用ctrl+c,再打开API
在这里插入图片描述

在jdk8加了静态方法和默认方法,现在暂时不关注,后面String的Api再关注
在这里插入图片描述
现在关注的都是抽象方法,15个抽象方法
在这里插入图片描述
如果自己设计一个Collection,去存储一个一个的数据,会设计哪些方法?

2.1 添加

2.1.1add(E obj)添加元素对象到当前集合中,一个一个添加元素

在这里插入图片描述
在这里插入图片描述
123基本数据类型,此处是自动装箱操作在这里插入图片描述
在这里插入图片描述
造一个自定义类的对象Person
在这里插入图片描述
提供name,age,再提供空参构造器
在这里插入图片描述
再提供带参构造器
在这里插入图片描述
get,set方法省略,提供toString方法
在这里插入图片描述
new一个Tom
在这里插入图片描述
以上就添加了5个对象

此处打印的时候里面也调了toString方法d在这里插入图片描述
就将对象打印了出来
在这里插入图片描述

2.1.2addAll(Collection other):添加other集合中的所有元素对象到当前集合中,即this=this U other

(将参数中的元素都加到当前集合中coll)
在这里插入图片描述

新建coll1
在这里插入图片描述
对coll1加点数据,加完后进行调用addAll方法,再进行打印
在这里插入图片描述
在原有的数据上又加了两个数据,原先是5个元素,现在加了两个数据后是7个元素
在这里插入图片描述
size获取集合中元素个数的方法
在这里插入图片描述
在这里插入图片描述

2.1.3注意:add和addAll的区别

coll.add是将coll1集合看成是整体的一个元素
在这里插入图片描述
此时再查询集合元素的个数就是6
在这里插入图片描述
整个coll1集合中的元素充当了一个元素
在这里插入图片描述

在这里插入图片描述

2.2判断

2.2.1 int size()获取当前集合中实际存储的元素个数

2.2.2 boolean isEmpty()获取当前集合中是否为空集合

判断集合是否为空,false
在这里插入图片描述
在这里插入图片描述

2.2.3 boolean contains(Object obj)判断当前集合中是否存在一个与obj对象equals返回true的元素

判断是否包含AA
在这里插入图片描述
返回值为true
在这里插入图片描述
coll.contains(128),返回的结果为true
coll.contains(128)此处是自动装箱,128此处已经超出了数组的范围,这就是新new的,
在这里插入图片描述

在这里插入图片描述
这个包含的128是新new的,此处比较的不是==,不是比地址,
在这里插入图片描述

举例说一下,此处new的是一个String在这里插入图片描述
判断是否包含,此处返回也是true,比较的不是地址,而是比较的是内容
在这里插入图片描述
调的是equals方法,String和Integer都重写过,即都是true
在这里插入图片描述

此处这样是true
在这里插入图片描述

此处运行返回后,是false
System.out.println(coll.contains(new Person(“Tom”,12)));此处按理说调的还是equals方法-再去看Person类的代码,Person类的代码里没有重写equals方法,用的是Object里的equals方法就是==,进行地址比较

在这里插入图片描述
在这里插入图片描述
这两个地址相比显然不一样,即就是false
在这里插入图片描述
在这里插入图片描述
一般调contains时都是调的是equals方法,就是比内容,对于自定义对象的这种想往集合里放元素,都要求在自定义类中重写equals方法alt+insert 在这里插入图片描述

在这里插入图片描述
hashcode代码用不着可以进行注释
在这里插入图片描述
可以发现调用了几次
在这里插入图片描述
调用了四次
在这里插入图片描述

contains若添加的是自定义的类的对象,就需要在自定义类中加上重写的equals方法

2.2.4 boolean containsAll(Object obj)判断coll集合中的元素是否在当前集合中都存在,即coll集合中的元素是否在集合中的子集。

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

在这里插入图片描述

2.2.5 boolean equals(Object obj):判断当前集合与obj是否相等

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

2.3删除

在这里插入图片描述

2.3.1 void clear():从当前集合中删除第一个找到的与obj对象equals返回true的元素

在这里插入图片描述
在这里插入图片描述
打印size为0,不是空指针的原因是test3方法里有Collection p1=new ArrayList()对象
在这里插入图片描述
在这里插入图片描述
clear方法的原理
Collection p1=new ArrayList(),ArrayList集合底层也是数组
此处只能是放对象,都是Object,此处都是放的地址值(因为是引用类型)
在这里插入图片描述

在这里插入图片描述
地址值再指向new的对象
在这里插入图片描述

一个一个进行清理掉(而不是size为0,防止内存泄漏)
在这里插入图片描述

2.3.2 boolean remove(Object obj):删除指定元素。从当前集合中删除所有与coll集合中相同的元素,即this=this-this交集 coll

在这里插入图片描述
在这里插入图片描述
此处new一个person,能否删掉
在这里插入图片描述
此处删掉了,删的话判断有新new的对象就会进行删除,判断有没有时调的是equals方法(肯定有啊),有就会进行删除,remove是一旦找到了想要删除的元素就会停止进行操作

在这里插入图片描述

2.3.3 boolean removeAll(Collection coll):删除集合中的所有元素。从当前集合中删除两个集合中不同的元素,使得当前集合仅留与coll集合中的元素相同的元素,即当前集合中仅保留两个集合的交集。即this=this交集 coll

coll.removeAll(coll1)删除coll1所有元素
差集的意思
在这里插入图片描述

2.3.4boolean retainAll(Collection coll):从当前集合中仅保留与coll集合中的元素相同的元素、即当前集合中仅保留两个集合的交集,即this=this交集coll

即是交集
在这里插入图片描述

2.4其他在这里插入图片描述

2.4.1Object[] toArray():返回包含当前集合中所有元素的数组,集合—>数组

在这里插入图片描述
先整一个集合过来
在这里插入图片描述
集合怎么转换成数组
在这里插入图片描述
返回值是用Object类型数组进行装(因为添加的时候都是Object)
在这里插入图片描述
看一下数组具体的元素都有哪些?此处有一个简便的方法
在这里插入图片描述
这就是数组中的元素
在这里插入图片描述

2.4.2hashcode[]:获取集合对象的哈希值

在这里插入图片描述

2.4.2iterator:返回迭代器对象,用于集合遍历

2.5总结

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

2.5.1.常用方法:Collection中定义了15个抽象方法

add(Obj obj)
addAll(Collection coll)
size()
isEmpty()
contains(Object obj)
cotainsAll(Collection coll)
retainAll(Collection coll)
hashCode()
remove(Object obj)
removeAll(Collecion coll)
clear()
Iterator()
toArray()

2.5.1.集合与数组之间的相互转换

2.5.1.1 集合---->数组:toArray()方法,返回类型是一个Object类型的数组Object[]

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

2.5.1.2 数组---->集合:调用Arrays的静态方法asList(Object …obj)

在这里插入图片描述

数组转集合,首先要有数组,数组有一个工具类Arrays
在这里插入图片描述
Arrays有一个方法asList(T…a),形参是一个可变形参,此处就可以放可变数组
在这里插入图片描述
假设有一个数组arr,形参就是arr数组

在这里插入图片描述
返回值就是一个集合

alt+回车自动生成返回类型
在这里插入图片描述
泛型暂时没见过,先删除
List是Collection的子接口,即就是collection
在这里插入图片描述
即就转换成了collection
在这里插入图片描述

打印list
在这里插入图片描述
在这里插入图片描述
这种写法也是可以的
在这里插入图片描述
在这里插入图片描述

2.5.1.3 注意
① 场景1

此处有一个小细节,此时的代码是自动装箱
在这里插入图片描述
在这里插入图片描述
此处有多少个元素?
在这里插入图片描述

② 场景2

问下面的size是多少?
在这里插入图片描述asList只能放对象,不能放基本数据类型,只能将整个数组看成是一个对象,即就是一个元素,而对于Integer他是自动装箱后的对象
在这里插入图片描述

在这里插入图片描述

打印一下list、list1的元素的情况
在这里插入图片描述
第二个[[I@1888ff2c]是int类型的一维数组在这里插入图片描述

2.5.1.向Collection中添加元素的要求:要求元素所属的类一定要重写equals方法

在这里插入图片描述
在这里插入图片描述
因为调contains或者remove方法时,他要去调obj所属类的equals方法,调equals比较的是内容,若不重写的话会去调用Object中的==不太合适
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

后端学习笔记:Python基础

后端学习笔记:Python基础 数据类型: Python中主要有以下几种常用的基本数据类型: String 字符串类型,用单引号或者双引号引用Number 数字类型,包括浮点数,整数,长整数和复数List 列表项&…

界面构件开发之RC文件

代码; #include <gtk-2.0/gtk/gtk.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <glib-2.0/glib.h> #include <stdio.h>int main(int argc, char *argv[]) {gtk_init(&argc, &argv);gtk_rc_parse("./mainrc");GtkWidget *winN…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 连续字母长度(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

某棋牌渗透测试

前言 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、信息收集 这里通过fofa进行收集&#xff0c;语法为&#xff1a;body某棋牌 && titlexxx 图1-1 fofa资产收集 …

Human4DiT:使用 4D Diffusion Transformer 生成自由视角人物视频。

Human4DiT&#xff0c;使用 4D Diffusion Transformer 生成自由视角人物视频。又一个根据一张图&#xff0c;生成人物动画视频的项目&#xff0c;效果如下视频所示。 给定参考图像、SMPL序列和摄像机参数&#xff0c;Human4DiT能够生成自由视图动态人体视频。 相关链接 项目地…

神经网络模型---LeNet-5

一、LeNet-5 1.定义LeNet-5模型 model models.Sequential([1.1添加一个二维卷积层&#xff0c;有6个过滤器&#xff0c;每个过滤器的尺寸是5x5。输入图像尺寸是28x28像素&#xff0c;具有1个颜色通道,激活函数是relu layers.Conv2D(6, (5, 5), activationrelu, input_shape…

【Codesys】-计算开机通电运行时间,累计正常使用时间,故障停机时间

应客户要求&#xff0c;在程序添加了这个用来计算开机运行时间&#xff0c;原理就是取当前时间减去一开始记录的时间&#xff0c;没什么特别要求&#xff0c;记录一下使用的变量类型和数据写法&#xff0c;防止忘记了。 下文只写了一个开机通电运行时间的写法&#xff0c;累计…

ROS操作过程中的报错

文章目录 错误&#xff1a;E: Unable to locate package ros-noetic-desktop-full报错问题报错原因解决方法 错误2&#xff1a;ERROR: cannot download default source list from:报错问题错误原因解决办法 错误&#xff1a;E: Unable to locate package ros-noetic-desktop-fu…

养殖自动化温控系统:现代养殖场的智能守护神

现代农业养殖业中&#xff0c;养殖自动化温控系统已经成为提高生产效率和保障动物福利的关键技术之一。本篇文章将深入介绍养殖自动化温控系统的原理、组成、优势及其在不同类型养殖场中的应用实例&#xff0c;并展望该技术的未来发展。 一、养殖自动化温控系统概述 养殖自动…

智能制造 v3.13.12 发布,ERP、在线课堂、表白墙更新

智能制造一体化管理系统 [SpringBoot2 - 快速开发平台]&#xff0c;适用于制造业、建筑业、汽车行业、互联网、教育、政府机关等机构的管理。包含文件在线操作、工作日志、多班次考勤、CRM、ERP 进销存、项目管理、EHR、拖拽式生成问卷、日程、笔记、工作计划、行政办公、薪资模…

Hive笔记-3

3.2.2 查看表 1) 展示所有表 (1) 语法: 语法: SHOW TABLES [IN database_name] LIKE [identifier_with_wildcards]; In database_name 写的是查哪个数据库,一般不写默认是当前数据库 Like 后面跟通配符表达式 (2) 案例: 查看在 db_hive1 数据库里有没有以 stu 开头的表 …

C++第二学期期末考试选择题题库(qlu题库,自用)

又到了期末周&#xff0c;突击一下c吧— 第一次实验 1、已知学生记录的定义为&#xff1a; struct student { int no; char name[20]; char sex; struct 注意年月日都是结构体&#xff0c;不是student里面的 { int year; int month; …

如何在springboot项目中引入knife4j接口文档

开发框架&#xff0c;帮助后端开发人员做后端接口测试 knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案 引入依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId>&…

模电电流源相关知识总结

模电书版本为第五版&#xff1a; 一、基本电流源 1、镜像电流源 电路图&#xff1a; 电路图很好理解&#xff0c;T0和T1两个晶体管参数相近&#xff0c;即当施加相同的Ube时&#xff0c;对应的Ic也相同。 可用图中的电阻R来控制电流源的电流。 计算公式&#xff1a;Ic&…

C# WPF入门学习番外篇——C#使用WPF连接MySQL数据库

在 C# 中使用 WPF 连接 MySQL 数据库涉及几个步骤&#xff0c;包括安装必要的库&#xff0c;配置连接字符串&#xff0c;编写代码以执行数据库操作等。下面是一个详细的入门教程&#xff0c;帮助你理解如何在 WPF 应用程序中使用 MySQL 数据库。 1. 安装 MySQL 数据库连接器 …

来都来了,8个JavaScript技巧奉上

吆喝一声&#xff0c;如果你计算机、软件工程、电子等相关专业本科及以上学历&#xff0c;欢迎来共事。前后端/测试可投&#xff0c;技术大厂。 JavaScript 作为最流行的语言之一&#xff0c;其语法灵活且每年都在不断吸纳新特性&#xff0c;即使是一个从业多年的老手&#xff…

el-table表格变更前后根据数据值改变背景颜色

需求&#xff1a; 1.左侧变更前表格数据不可以编辑&#xff0c;并且背景色加灰 2.右侧变更后表格数据可被编辑&#xff0c;编辑后变更前与变更后行数据不一致&#xff0c;添加背景色区分 3.点击删除的时候&#xff0c;给变更后表格当前行&#xff0c;添加背景色和删除的中横…

【UML用户指南】-15-对高级结构建模-对象图

目录 1、对象图的组成 2、 对象图和类图关系 3、对对象结构建模 4、逆向工程 5、对象图构建要求 对象图对包含在类图中的事物的实例建模。 对象图显示了在某一时间点上一组对象以及它们之间的关系。 对象图用于对系统的静态设计视图或静态交互视图建模。 对某一时刻的系统…

计算机网络知识点汇总(二)

计算机网络知识点汇总 第1章计算机网络体系结构 1.1 计算机网络概述 1.1.1 计算机网络的概念 ​ 计算机网络是由若干个结点(node)和连接这些结点的链路(link)组成。网络中的结点可以是就三级、集线器、交换机、或者路由器等&#xff0c;网络之间通过路由器进行互联&#xf…

记一次某单位的内网渗透测试

0x01 web打点 访问漏洞url:http://www.xx.xx.com进入某医疗系统 使用越权加文件上传拿到shell 0x02 内网渗透 192.168.xx.x 管理员 通过哥斯拉上线msf 上线后进行信息收集: 网卡信息、补丁信息、杀毒进程、用户在线情况、是否存在域、翻文件查找数据库密码、浏览器保存密码…