容器相关笔记

1.容器

        1.什么是容器

                容器就是存放对象的集合

        2.java中的容器

                容器就是一系列的类或接口,用来存储一系列对象的地址

        3.容器里存放的是引用数据类型(存对象的地址,不是对象本身),不能存基本数据类型

        4.容器存放的两种格式

                1.单一的类型:直接存对象地址

                2.键值对:存入关键字和对应的value

        5.容器类所在的包

                java.util包中,所以引入容器的时候引入的是java.util.容器类名

        6.容器的分类

                1.Collection,存放单一的类型

                        1.Collection下有三个接口,Set,List,Queue

                        2.有序是指存入的顺序和取出的顺序

                        3.Collection里面的方法

                 以下表格基于Collection list = new ArrayList();

形参返回值性质例子作用
add要存入的对象非静态list.add("asd")插入一个元素
iterator"Iterator对象"非静态Iterator i = list.iterator获取迭代器对象
sizeint非静态int a = list.size();获取容器长度
isEmptyboolean非静态boolean b = list.isEmpty();判断容器是否为空
contains非静态对象boolean

String temp = new String("zjh");

System.out.println("contains:\t"+list.contains(temp));

看看容器中是否有temp对象
remove非静态对象list.remove(”asd“);按照对象内容指定删除
为什么要用容器而不直接使用数组来存储。数组存储单一的类型而且数组需要规定长度,但是容器不需要而且可以在一个容器中存储多种不同的数据类型

迭代器的作用是获取容器中的对象

迭代器就是用来获取一个有个的对象的

所以想要拿出来容器的数据就要用Collection父类的iterator方法获取到Iterator迭代器,然后使用方法hasNext来判断后面还有没有对象了,如果有就把通过next方法对象给拿出来

public class Run {public static void main(String[] args) {Collection list = new ArrayList();list.add("1234567");list.add("zjh");list.add(1234);Iterator it= list.iterator();//通过方法获取迭代器接口实现类的对象//迭代器主要有两个方法,一个是hasNext,一个是nextwhile(it.hasNext()){Object o = it.next();//把对象拿出来System.out.println(o.toString());//从这个出来的顺序可见是先进先出,也就是说ArrayList也具有对列的特性}}
}

                        1.List:有序,可重复,存入的数据有下标

                                1.List是一个继承了Collection接口的接口,拥有Collection的所有方法

                                2.有两个常用的实现类:

                                        1.ArrayList(非线程安全,线程不安全发生在数组扩容时):
                                                1.底层实现

                                                        底层实现就是个数组,适合查询等操作较多的集合

                                                2.构造方法:

                                                        分为有参和无参两个版本:

                                                        无参的构造方法默认长度为10

                                                        有参的构造方法可以指定默认长度

                                                        扩容的时候每次增加原长度的1.5倍

                                        2.LinkedList():
                                                1.底层实现

                                                        底层实现就是双向链表,适合插入删除等操作较多的集合

                                                2.构造方法

                                                        空构造方法,构造空链表

                                                        有参构造方法传入一ArrayList,ArrayList转LinkedList

                                        3.ArrayList和LinkedList拥有相同的方法

                                                remove,contains方法比较都是用equals方法比较来判断是否删除和是否有该元素的

方法名性质形参返回值例子作用
get非静态int(下标)对象Object o = list.get(i);获取在容器中下标为i的对象
contains非静态对象boolean

String temp = new String("zjh");

System.out.println("contains:\t"+list.contains(temp));

看看容器中是否有temp对象
remove非静态int(下标)list.remove(3);按照下标或者对象内容指定删除
对象list.remove("emm...");
                                       
                                              
                        2.Set:无序,不可重复(重复时只保留最后存入的一次对象(覆盖原来的))

                                1.也是个继承Collect的接口

                                2.三个实现类

                                        1.HashSet:
                                                1.底层实现

                                                        底层实现是Map

                                                2.构造方法

                                                        默认容量是16,哈希桶是0.75,意思是当容器里元素达到容量百分之七十五之后就开始扩容

                                                        无参构造方法形成的是没有元素的集合

                                                        有参构造方法可以传递进去一个ArrayList

                                                        有参构造方法也可以传入进去一个HashSet的大小,指定的值最好是二的幂次,因为源码在扩容的时候用的是位移扩容

                                                3.HashSet的方法
方法名性质形参返回值注意作用
remove非静态对象

如果是自己定义的对象记得重写equals方法

这次由于无序,所以没有根据下标删除了

删除一个元素
clear非静态删除HashSet里面所有的元素
                                        2.TreeSet(类似于HashSet,但是再进行遍历的时候会进行自动排序):

TreeSet比较特殊,使用的时候不使用多态,而是多数调用它独有的方法,所以定义引用的时候不用Set而用TreeSet

                                                1.底层实现

                                                        底层实现是二叉树

                                                2.TreeSet存储数据

                                                        1.TreeSet在存储数据的时候要求数据的类型需要一致,否则会在运行时报异常ClassCastException,

                                                        2.在TreeSet存储数据后会自动按照自平衡二叉树的方式来对这些对象进行排序

                                                        3.如何对于自定义的数据进行排序

                                                                由于TreeSet会自动进行存入数据的排序,调用的是对象的compareTo方法,所以自定义的类需要实现Comparable接口并且重写他的抽象方法:compareTo(),

//compareTo方法在重写的时候由于重写访问权限修饰符不能更小所以就是public
public int compareTo(Object o){//逻辑结构:如果对象比传入进来的对象小就返回一个负值,大就正值,等就是0
}

                                                         4.自定义类型存入TreeSet                       

//下列是自定义类型存入TreeSet
public class Run {public static void main(String[] args){TreeSet ts1 = new TreeSet();ts1.add(new Person(14));ts1.add(new Person(12));ts1.add(new Person(14));ts1.add(new Person(15));for(Object o : ts1){System.out.print(o+"\t");}//如果要打印记得要重写equals方法System.out.println("\n");}
}public class Person implements Comparable{private int age;public Person(){}public Person(int age){this.age = age;}public int getAge(){return age;}public void set(int age){this.age = age;}@Overridepublic int compareTo(Object o){//重写方法的时候如果原来的小,就返回负数,如果原来的大就返回正值Person p = (Person) o;return this.age-p.age;}@Overridepublic String toString(){return String.valueOf(age);}
}
                                                    3.TreeSet的方法 
名字形参返回值性质作用例子
first存储的对象非静态获取第一个(最小的)对象
System.out.println("自定义存入TreeSet后的第一个元素:\t"+ts1.first());
last存储的对象非静态获取最后一个(最大的)对象
System.out.println("自定义存入TreeSet后的最后一个元素\t:"+ts1.last());
TreeSet ts1 = new TreeSet();ts1.add(new Person(14));ts1.add(new Person(12));ts1.add(new Person(14));ts1.add(new Person(15));ts1.add(new Person(16));ts1.add(new Person(17));ts1.add(new Person(19));System.out.print("自定义数据存入TreeSet\t" );for(Object o : ts1){System.out.print(o+"\t");}System.out.println("\n自定义存入TreeSet后的第一个元素:\t"+ts1.first()+"\t最后一个元素"+ts1.last());

运行结果:

 自定义数据存入TreeSet    12    14    15    16    17    19    
自定义存入TreeSet后的第一个元素:    12    最后一个元素19

                                        3.LinkedHashSet:的底层实现就是在Map上加了个链表 (区别就是有序了,但是这个有序是针对存入取出有序,但是仍然不重复)      
                                3.collection总结代码
public class Person implements Comparable{private int age;public Person(){}public Person(int age){this.age = age;}public int getAge(){return age;}public void set(int age){this.age = age;}@Overridepublic int compareTo(Object o){//重写方法的时候如果原来的小,就返回负数,如果原来的大就返回正值Person p = (Person) o;return this.age-p.age;}@Overridepublic String toString(){return String.valueOf(age);}
}public class Run {public static void main(String[] args) {collection();}public static void collection(){Collection list = new ArrayList();list.add("1234567");list.add("zjh");list.add(1234);Iterator it= list.iterator();//通过方法获取迭代器接口实现类的对象//迭代器主要有两个方法,一个是hasNext,一个是nextwhile(it.hasNext()){//看看迭代器是否有下一个Object o = it.next();//把对象拿出来。且让迭代器向下指一个元素System.out.println(o.toString());//从这个出来的顺序可见是先进先出,也就是说ArrayList也具有对列的特性}System.out.println("容器长度为:\t"+list.size());System.out.println("容器为空:\t"+list.isEmpty());//ArrayList部分List a = new ArrayList();//add的重载默认是尾插a.add("adw");a.add("adw");//可以体现重复a.add("zjh");a.add(2,199);//相当于就是插入//按常理来讲对容器进行遍历是要通过迭代器的,但是ArrayList有下标,所以此时选择的是直接通过下标来进行遍历//此时就有了get方法来获取对象,get的形参时对象的下标System.out.print("容器内现有元素:\t");for(int i = 0;i<a.size();i++){Object o = a.get(i);System.out.print(o+"\t");}//contains方法:比较容器当中是否有某个对象//判断是否有这个对象的时候调用的这个对象的equals方法//在添加对象进入容器的时候要把这个对象的equals方法重写String temp = new String("zjh");System.out.println("\ncontains:\t"+a.contains(temp));//虽然s指向的是字符串对象,字符串对象里面含有字符串的地址,也就是说s指向的地址和容器当中所保存的字符串地址是不同的,但是contains在比较的时候调用了对象的equals方法,所以返回值是true//remove方法System.out.println("删除前容器长度"+a.size());a.remove(2);//删除下标为2的元素,删除某个元素后其余元素会填补回来a.remove("adw");//按照对象删除的时候只删除一遍System.out.println("删除后容器长度"+a.size());System.out.print("容器内剩余的元素:");for(int i = 0;i<a.size();i++){Object o = a.get(i);System.out.print(o+"\t");}System.out.println("\n");//LinkedList部分List list1 = new LinkedList(a);Iterator itr = list1.iterator();System.out.print("list1容器里的元素为\t");while(itr.hasNext()){Object o = itr.next();System.out.print(o+"\t");}list1.add("wada");list1.remove("adw");System.out.print("\n删除“adw”,插入“wada之后还剩”"+list1.size()+"个元素,分别是\t");for(int i = 0;i<list1.size();i++){System.out.print(list1.get(i)+"\t");}//也可以直接使用增强型for循环
//        for(Object o :list1){
//            System.out.println(o);
//        }System.out.println("\n");//Set//HashSet部分Set s=new HashSet();s.add("牛马");s.add("sad");s.add(new String("sad"));//此处说明了和contains一样,判断重复与否是根据equals方法的s.add("asd");s.add("asd");System.out.println("HashSet容器长度为:"+s.size()+"体现了Set的不可重复性,如果重复后面的会覆盖前者的数据");System.out.print("s中的元素有:\t");//从打印结果来看就可以知道这个时候是无序的取出for (Object o :s) {System.out.print(o+"\t");}s.clear();System.out.println("\nclear之后的s的长度:\t"+s.size());//TreeSet部分,存储的数据,数据类型必须保持一致TreeSet ts = new TreeSet();//会按照自平衡二叉树的方式对于给定的数据进行排序ts.add(22);ts.add(33);ts.add(453);ts.add(3);ts.add(34);ts.add(231);System.out.print("ts里面的元素为:\t");for(Object o : ts){System.out.print(o+"\t");}System.out.println("\n");//自定义类型的比较需要在自定义的类当中实现Comparable接口并且重写compareTo方法TreeSet ts1 = new TreeSet();ts1.add(new Person(14));ts1.add(new Person(12));ts1.add(new Person(14));ts1.add(new Person(15));ts1.add(new Person(16));ts1.add(new Person(17));ts1.add(new Person(19));System.out.print("自定义数据存入TreeSet\t" );for(Object o : ts1){System.out.print(o+"\t");}System.out.println("\n自定义存入TreeSet后的第一个元素:\t"+ts1.first()+"\t最后一个元素"+ts1.last());}
}

                2.Map,存放键值对的类型

                       

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

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

相关文章

【BIAI】lecture 3 - GD BP CNN Hands-on

GD & BP & CNN & Hands-on 专业术语 gradient descent (GD) 梯度下降 back propagation (BP) 向传播 Convolutional Neural Network (CNN) 卷积神经网络 forward propagation 前向传播 biologically symmetry 生物对称性 synaptic 突触 axon 轴突 课程大纲 The go…

BUUCTF crypto做题记录(6)新手向

一、Unencode 得到的密文&#xff1a;89FQA9WMD<V1A<V1S83DY.#<W3$Q,2TM] 看题目名字&#xff0c;我们可以知道这是一个解码的题目&#xff0c;但是unencode 好像是不可解码的意思&#xff0c;我们可以对照着解码方式看一下哪个更适合&#xff0c;可以进行尝试一下C…

Linux系统操作——重启oracle服务:监听器和实例

目录 一、重启Oracle数据库及监听器 【方法一】 【方法二】 【方法三】 二、查看oracle监听状态 三、重启实例 一、重启Oracle数据库及监听器 【方法一】 获取root权限 su root 进入oracle的安装目录 cd $ORACLE_HOME 重启数据库 dbstart 重启监听器 lsnrctl st…

RocketMQ 投递消息方式以及消息体结构分析:Message、MessageQueueSelector

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

H5的3D游戏开源框架

在H5的3D游戏框架中&#xff0c;Three.js、Babylon.js和Turbulenz是比较受欢迎的选择。 Three.js是一个广泛应用并且功能强大的JavaScript 3D库&#xff0c;可以创建简单的3D动画到创建交互的3D游戏。 Babylon.js是David Catuhe对3D游戏引擎热爱的结果&#xff0c;是最好的Jav…

腾讯云取消免费10G CDN流量包:免费CDN时代结束

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 免费送了7-8年的腾讯云10G免费流量包&#xff0c;从2024年开始&#xff0c;停止赠送了!自此&#xff0c;国内绝大多数互联网大厂的CDN都开收费了! 大概从2016年开始&#xff0c;腾讯云为了抢夺CDN客户&#xff0…

基于Spring-boot-websocket的聊天应用开发总结

目录 1.概述 1.1 Websocket 1.2 STOMP 1.3 源码 2.Springboot集成WS 2.1 添加依赖 2.2 ws配置 2.2.1 WebSocketMessageBrokerConfigurer 2.2.2 ChatController 2.2.3 ChatInRoomController 2.2.4 ChatToUserController 2.3 前端聊天配置 2.3.1 index.html和main.j…

从0开始python学习-43.通过yaml实现不同文件之间参数的关联

目的&#xff1a; 1. 统一管理接口关联的中间变量 2. 解决多个py文件中间的中间变量关联的问题 新建一个yaml_util.py进行封装读写清空yaml方法 # 读取 def read_yaml(key): with open("extract.yaml",encoding"utf-8") as f: #这里的文件如果没有会自…

mnn-llm: 大语言模型端侧CPU推理优化

在大语言模型(LLM)端侧部署上&#xff0c;基于 MNN 实现的 mnn-llm 项目已经展现出业界领先的性能&#xff0c;特别是在 ARM 架构的 CPU 上。目前利用 mnn-llm 的推理能力&#xff0c;qwen-1.8b在mnn-llm的驱动下能够在移动端达到端侧实时会话的能力&#xff0c;能够在较低内存…

MySQL之视图外连接、内连接和子查询的使用

一、视图 1.1 含义 虚拟表&#xff0c;和普通表一样使用 1.2 操作 创建视图 create view 视图名 as 修改视图 方式一&#xff1a; create or replace view 视图名 as 【查看视图相关字段】 方式二&#xff1a; alter view 视图名 as 【查看的SQL语句】 查看视图 方式一&…

Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为AVI视频格式(C#)

Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为视频格式&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的图像转换为OpenCV的图像的技术背景在NEOAPI SDK里实现相机图像转换为视频格式 工业相机通过OpenCV实现相机图像转换为视频格式的优…

Docker Zookeeper 安装 简单教程

现在各种组件大部分都能找到Docker的镜像了&#xff0c;Docker容器化安装很多复杂中间件都变得非常轻松了。 1.拉取镜像 以下命令默认是拉取最新版本 zookeeper:latest docker pull zookeeper 注: 若要拉取指定版本如3.7&#xff0c;则可以执行命令 docker pull zookeeper:…

Nginx快速入门:Nginx实现高可用|结合keepalived实现主备节点(九)

0. 引言 在生产中我们要尽可能避免单点故障&#xff0c;nginx也不例外&#xff0c;因此搭建主备节点必不可少&#xff0c;今天我们来学习下如何利用keepalived实现主备 1. keepalived简介 keepalived 是一个LINUX系统中开源的负载均衡和故障转移软件&#xff0c;它主要用于高…

2024年阿里云、腾讯云、华为云、LightNode、硅云服务器如何选?怎么买最划算?[最新价格表]

很多小伙伴都有一颗上云的心&#xff0c;包括我自己 有事没事的折腾一下自己的小破站&#xff0c;也挺有意思的&#xff01; 那么&#xff0c;云服务器哪家好&#xff1f;优惠力度哪家大&#xff1f;活动入口哪里进&#xff1f;云服务器如何配置&#xff1f;如何选型&#xf…

K8S集群部署解决工作节点couldn‘t get current server API group list问题

最近在自己电脑上装了VMWare Player&#xff0c;在上面装了两个Ubuntu虚拟机&#xff0c;为了方便学习云原生技术&#xff0c;决定在上面装一个2个节点&#xff08;一个控制面&#xff0c;一个工作节点&#xff09;的K8S集群。 参考这篇文章&#xff1a; Ubuntu 22.04 搭建K8…

kubectl的插件安装工具krew

最近得知一个kubectl插件安装工具&#xff0c;叫做krew。 官网地址是&#xff1a;Krew – kubectl plugin manager 安装krew 按照官网的做法&#xff0c;一直安装失败&#xff0c;于是拆解步骤&#xff0c;一步一步下载离线安装。 1、下载krew.yaml 地址&#xff1a;https:…

体验ubuntu,windows双系统

大家好&#xff0c;这里是七七&#xff0c;今天来分享一下安装双系统的经历&#xff0c;这不是用虚拟机来运行哦。 一、安装过程 首先是下载一个ubuntu&#xff08;对于新手建议下载ubuntu kylin,这是国产的哦&#xff09;的镜像&#xff0c;并且对内存进行压缩、分区。然后用…

Proteus 各版本安装指南

Proteus下载链接 https://pan.baidu.com/s/1vHgg8jK9KSHdxSU9SDy4vQ?pwd0531 1.鼠标右击【Proteus8.15(64bit&#xff09;】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;【解压到Proteus8.15(64bit&#xff09; 】。 2.打开解压后的文件夹&#…

自建数据库如何选择阿里云服务器配置?

阿里云服务器配置如何选择&#xff1f;用于自建数据库可以第七代云服务器ECS计算型c7、通用型g7或内存型r7实例&#xff0c;企业级独享型云服务器&#xff0c;CPU采用第三代Intel Xeon可扩展处理器&#xff08;Ice Lake&#xff09;&#xff0c;基频2.7 GHz&#xff0c;全核睿频…

适用于生物行业的生信云平台

随着基因检测技术的不断发展&#xff0c;生物信息云平台在基因检测行业的应用越来越广泛。生物信息云平台是一种基于云计算的技术&#xff0c;可以将基因检测数据存储在云端&#xff0c;并通过数据分析、挖掘等技术手段&#xff0c;对基因数据进行处理、分析和解读。 这种技术的…