41、集合

news/2024/5/1 12:17:10/文章来源:https://blog.csdn.net/weixin_72052233/article/details/128000328

一、基本介绍:

1、引入:

(1)前面我们保存多个数据使用的是数组,但数组不足的地方有:

1)长度开始时必须指定,而且一旦指定,不能更改

2)保存的必须为同一类型的元素

3)使用数组进行增加元素的示意代码—比较麻烦

(2)集合

1)可以动态保存任意多个对象,使用比较方便!

2)提供了一系列方便的操作对象的方法:add、remove、set、get等

3)使用集合添加,删除新元素的示意代码—简洁了

2、java的集合类很多,主要分为两大类: 

 

 3、快速入门

package Collection_;import java.util.ArrayList;
import java.util.HashMap;public class Collection01 {@SuppressWarnings({"all"})public static void main(String[] args) {//单列集合,存放的是一个对象ArrayList arrayList=new ArrayList();arrayList.add("jack");arrayList.add("tom");//双列集合,存放的是键值对 K-VHashMap hasMap=new HashMap();hasMap.put("N01","Beijing");hasMap.put("N02","Shanghai");}
}

二、Collection接口和常用方法:

1、Collection接口实现类的特点:

(1)Collection实现子类可以存放多个元素,每个元素可以是Object

(2)有些Collection的实现类,可以存放重复的元素,有些不可以

(3)有些Collection的实现类,有些是有序的(List),有些不是有序的(Set)

(4)Collection接口没有直接地实现子类,是通过它的子接口Set和List来实现的

2、Collection接口常用方法:

package Collection_;import java.util.ArrayList;public class List_ {@SuppressWarnings({"all"})public static void main(String[] args) {ArrayList list=new ArrayList();list.add("jack");list.add(10);list.add(true);System.out.println("lsit="+list);//lsit=[jack, 10, true]list.remove(true);System.out.println("lsit删掉true了吗:"+list);//lsit删掉true了吗:[jack, 10]System.out.println("list是否包含jack:"+list.contains("jack"));//list是否包含jack:trueSystem.out.println("list包含的元素个数:"+list.size());//list包含的元素个数:2System.out.println("list是否为空:"+list.isEmpty());//list是否为空:falselist.clear();System.out.println("list是否已经清空:"+list);//list是否已经清空:[]ArrayList list2=new ArrayList();list2.add("tom");list2.add("smith");list.addAll(list2);System.out.println("list把list2的元素全部添加:"+list);//list把list2的元素全部添加:[tom, smith]System.out.println("在list中查找list2的全部元素:"+list.containsAll(list2));//在list中查找list2的全部元素:truelist.removeAll(list2);System.out.println("把list中list2的元素全部删掉:"+list);//把list中list2的元素全部删掉:[]}
}

3、Collection接口遍历元素方式:

(1)方式一:使用Iterator(迭代器)

1)Iterator对象称为迭代器,主要用于遍历Collection集合中的元素

2)所有实现了Collection接口的集合类都有一个Iterator()方法,用以返回一个实现了Iterator接口的对象,即可以返回一个迭代器

3)Iterator仅用于遍历集合,Iterator本身并不存放对象

 4)

 5)

package Collection_;import java.awt.print.Book;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Objects;public class CollectionIterator {@SuppressWarnings({"all"})public static void main(String[] args) {Collection col=new ArrayList();col.add(new Book1("三国演义","罗贯中",10.1));col.add(new Book1("小李飞刀","古龙",5.1));col.add(new Book1("红楼梦","曹雪芹",34.6));//遍历col集合输出//1、先得到col对应的迭代器//2、使用while循环,快捷键:itit,//Ctrl+J可以查看更多的快捷键//3、当退出while循环后,这时iterator迭代器,指向最后的元素,iterator.next();报错//4、如果希望再次遍历,需要重置迭代器Iterator iterator=col.iterator();while(iterator.hasNext()){//判断是否还有数据//返回下一个元素,类型是Object,编译类型是Object,// 但运行类型取决于col集合里添加的内容,可能是Book1,也可能是StringObject obj=iterator.next();System.out.println("obj="+obj);}iterator=col.iterator();//重置迭代器System.out.println("=========第二次遍历========");while(iterator.hasNext()){Object obj=iterator.next();System.out.println("obj="+obj);}}
}
class Book1{private String name;private String author;private double price;public Book1(String name,String author,double price){this.name=name;this.author=author;this.price=price;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +'}';}
}
//obj=Book{name='三国演义', author='罗贯中', price=10.1}
//obj=Book{name='小李飞刀', author='古龙', price=5.1}
//obj=Book{name='红楼梦', author='曹雪芹', price=34.6}
//=========第二次遍历========
//obj=Book{name='三国演义', author='罗贯中', price=10.1}
//obj=Book{name='小李飞刀', author='古龙', price=5.1}
//obj=Book{name='红楼梦', author='曹雪芹', price=34.6}

 (2)方式二:for循环增强

1)特点:增加for就是简化版的iterator,本质一样,只能用于遍历集合或数组

2)基本语法:

for(元素类型 元素名:集合名式数组名){访问元素;
}
package Collection_;import java.util.ArrayList;
import java.util.Collection;public class CollectionFor {@SuppressWarnings({"all"})public static void main(String[] args) {Collection col=new ArrayList();col.add(new Book1("三国演义","罗贯中",10.1));col.add(new Book1("小李飞刀","古龙",5.1));col.add(new Book1("红楼梦","曹雪芹",34.6));//1、在Collection集合中使用增强for//2、增强for,底层仍然是迭代器,所以增加for就是简化版的iterator//3、增强for的快捷键是Ifor(Object book:col){System.out.println("bool="+book);}}
}
//bool=Book{name='三国演义', author='罗贯中', price=10.1}
//bool=Book{name='小李飞刀', author='古龙', price=5.1}
//bool=Book{name='红楼梦', author='曹雪芹', price=34.6}

(3)练习题:

 //我的代码:

package Collection_;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class CollectionExercise {@SuppressWarnings({"all"})public static void main(String[] args) {Dog dog1=new Dog("jack",1);Dog dog2=new Dog("tom",2);Dog dog3=new Dog("smith",3);ArrayList list=new ArrayList();list.add(dog1);list.add(dog2);list.add(dog3);System.out.println("用迭代器来遍历:");Iterator iterator=list.iterator();while (iterator.hasNext()) {Object next =  iterator.next();System.out.println(list);}System.out.println("用增强for循环来遍历:");for (Object dog :list) {System.out.println(list);}}
}
class Dog{private String name;private int age;public Dog(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Dog{" +"name='" + name + '\'' +", age=" + age +'}';}
}
//用迭代器来遍历:
//[Dog{name='jack', age=1}, Dog{name='tom', age=2}, Dog{name='smith', age=3}]
//[Dog{name='jack', age=1}, Dog{name='tom', age=2}, Dog{name='smith', age=3}]
//[Dog{name='jack', age=1}, Dog{name='tom', age=2}, Dog{name='smith', age=3}]
//用增强for循环来遍历:
//[Dog{name='jack', age=1}, Dog{name='tom', age=2}, Dog{name='smith', age=3}]
//[Dog{name='jack', age=1}, Dog{name='tom', age=2}, Dog{name='smith', age=3}]
//[Dog{name='jack', age=1}, Dog{name='tom', age=2}, Dog{name='smith', age=3}]
//改进:list.add(new Dog("jack",1));list.add(new Dog("tom",2));list.add(new Dog("smith",3));

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

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

相关文章

Socket网络编程

参考博客:https://blog.csdn.net/shuux666/article/details/124023652 1、环境查看 通过cmd窗口的命令:ipconfig查看本机IP地址 查看网络情况是否正常:ping百度官网 2、Socket概述 3、套接字建立连接过程 4、Socket网络编程 基本的Socket编程: 本实…

异常(Exception)

随着面向对象的结束,我们的JavaSE也就接近了尾声,还有两个章节没有去梳理,常用类和异常,本章先讲异常,剩下的常用类后面再来补。 废话不多说,直接开始本章的内容。 1. 认识异常 引出: 假设 n…

ArcGIS综合制图教程,简单上手!

目的 1、了解专题地图组成的各个要素; 2、掌握ArcGIS编辑专题图的方法和步骤; 实习内容 使用ArcGIS生成1:200万比例尺的浙江省县级行政区划图,并输出成像文件。 实习步骤 一、将ArcGIS切换到Layout视图,并调整页面…

[附源码]java毕业设计疫情期间物资分派管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

C++初阶(stack+queue)

stack是一种容器适配器,专门用在具有后进先出 (last-in first-out)操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组…

精华推荐 | 【深入浅出RocketMQ原理及实战】「性能原理挖掘系列」透彻剖析贯穿RocketMQ的系统服务底层原理以及高性能存储设计挖掘深入

设计背景 消息中间件的本身定义来考虑,应该尽量减少对于外部第三方中间件的依赖。一般来说依赖的外部系统越多,也会使得本身的设计越复杂,采用文件系统作为消息存储的方式。 RocketMQ存储机制 消息中间件的存储一般都是利用磁盘&#xff0…

餐饮+KTV融合消费模式,会受消费者喜欢吗?

这个五一,我们雨科网门店系统的客户,大侠火锅店终于是将KTV搬到了自己的门店里,运用门店小程序功能及纸质代金券及礼品的噱头吸引客户进店,只需消费并和任意一人合唱一首歌即可领取,消费者在等餐或放松的时候一键点歌演…

OneAuth 2022.11.23版本更新内容

2022.11.23版本更新内容: 新增IdP飞书 云目录增加对Group的支持GWA浏览器插件适配性优化自定义授权服务器优化,适应RBAC、ABAC等多种场景授权IdP 北森优化,适配自定义的属性租户的部分试用功能需要联系后台开通其他一些Bug的修复 标题新增 …

PDF预览完整解决方案及各种兼容(VUE版)

PDF预览完整解决方案及各种兼容(VUE版) PDF预览完整解决方案及各种兼容(VUE版) - 掘金 前端学习使者正在上传…重新上传取消 2021年11月12日 16:57 阅读 2547 一、利用iframe 就一行代码就够了,只能满足最基本的…

ThinkPHP5目录结构

文章目录一、TP5的框架的下载1、[采用fastAdmin安装](https://www.fastadmin.net/download.html)2、Composer安装2.1 Composer提供的服务3、Git安装二、使用Composer安装后目录结构2.1 补充获取 Git 仓库git的工作机制一、TP5的框架的下载 1、采用fastAdmin安装 FastAdmin是一…

运营版uniapp多商户商城小程序+H5+APP+商家入驻短视频社区种草直播阶梯拼团

运营版uniapp多商户商城小程序H5APP商家入驻短视频社区种草直播阶梯拼团 前后端全套源码, 支持二次开发,代码无加密! 独立商家后台 用于店铺商品管理订单管理发货管理等 多类经营模式 多商家B2B2C、自营B2C运营模式 私有化部署 前端Uni…

JVM类加载(类加载过程、双亲委派模型)

系列文章目录 JVM的内存区域划分_crazy_xieyi的博客-CSDN博客 文章目录 一、类加载过程二、关于类加载的典型试题三、双亲委派模型一、类加载过程 对于一个类来说,它的生命周期是这样的:1.加载 “加载”(Loading)阶段是整个“类加…

spring 如何解决循环依赖

什么是循环依赖 A 类中有一个属性 B ,也就是说 A 依赖 B,同时 B 类中有一个属性 A, 也就是说 B 依赖 A. 他们之间的依赖关系形成了环。就是我们说的循环依赖,如下图: 循环依赖示例 public class CircularDependenciesDemo {publ…

SSM基于上述环境实现简单CUDA操作

目录 1. 结构 2. 环境: 3. controller 4. mapper 5. service 6. serviceImpl 7. mapper.xml 8. emplist.html 9. update 1. 结构 2. 环境: SSM整合 Spring SprintMVC Mybatishttps://blog.csdn.net/qq_41950447/article/details/128033971 3.…

Android -- 每日一问:Activity的启动模式(launchMode)有哪些,有什么区别?

经典回答 这应该是一道很虐人的面试题,很多人都答不上来,很多人根本就没有用过。当我发现在被我面试的人中有80%的比例对它不了解时,我找过一些同事讨论是否还有在面试中考查这个问题的必要,得到的回答是“程序员何苦为难程序员”…

2020-RKT

2020-RKT:Relation-Aware Self-Attention for Knowledge Tracing 有代码:https://github.com/shalini1194/RKT 摘要 学生在解决练习的过程中获得技能,每一次这样的互动都对学生解决未来练习的能力有明显的影响。 这种影响表现为:1)互动中涉…

电脑c盘满了怎么清理,快速清理,用这5招

​新买的电脑没用多久,突然发现系统提示磁盘空间不足。点击一看,电脑c盘空间已经爆满变红。当出现这种情况时,很多电脑的运行速度会大大降低,甚至导致部分应用无法正常运行。那么电脑c盘满了怎么清理?如何释放电脑c盘空…

C语言:关键字----switch、case、default(开关语句)

C语言:基础开发----目录 C语言:关键字—32个(分类说明) 有32个关键字详细说明,还有跳转链接! 一、开关语句----介绍 开关语句,包括以下四种关键字: switch:开关语句case: 开关语句…

【vim】系统剪切板、vim寄存器之间的复制粘贴操作命令?系统剪切板中的内容复制粘贴到命令行?vim文本中复制粘贴到命令行

一、系统剪切板和文本内容的复制粘贴 1.1 从系统剪切板复制粘贴到文本中 需要操作3次: 分别是英文双引号、一个加号或梅花号,最后是一个p 也即"p 或者直接使用组合键【Shift insert】 1.2 从文本复制粘贴到系统剪切板 也需要操作3次&#xff…

java EE初阶 — 计算机工作原理

文章目录1.操作系统2.操作系统的定位3.进程3.1 进程的基本了解3.2 操作系统内核是如何管理软件资源的3.3 PCB里描述了进程的哪些特征3.3.1 三个较为简单的特征3.3.2 进程的调度属性4.内存管理1.操作系统 操作系统是一个搞管理的软件。 对上要给软件提供稳定的运行环境。对下要…