集合框架(一)Collection
学习过了ArrayList,知道集合是一种容器,用来装数据的,类似于数组,但集合的大小可变,开发中也非常常用。
为了满足不同的业务场景需求Java还提供了很多不同特点的集合给我们选择。
集合体系结构
Collection是一个接口,并且是支持泛型的接口,这个接口只规定了单列集合的特点,比如基本的增删改查,同时Collection<E>下面又有很多子接口List<E>接口和Set<E>接口
Collection的常用方法
collection提供的所有的常见方法是所有单列集合都可以直接去使用的。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;public class CollectionTest2API {public static void main(String[] args) {/*首先肯定要用collection定义一个集合,集合类型是String类型的数据,collection是接口不能之间new对象,那就挑一个他的实现类ArrayList的集合对象给到Collection集合的变量c来记住*/Collection<String> c = new ArrayList<>();//多态写法//1.public boolean add(E,e):添加元素,添加成功返回truec.add("java1");c.add("java1");c.add("java2");c.add("java2");c.add("java3");System.out.println(c);//2.public void clear(E e):清空集台中所有的元素。//c.clear();//System.out.println(c);//3.public boolean isEmpty():判断当前集合是否为空。System.out.println(c.isEmpty());//4.public int size():返回集合中元素的个数。(获取集合的大小)System.out.println(c.size());//5.public boolean contains(0bject obj): 判断当前集合中是否包含给定的对象System.out.println(c.contains("java1"));System.out.println(c.contains("Java1"));//6.public boolean remove(E e):把给定的对象在当前集合中删除:如果有相同的元素他会删除前面一个元素System.out.println(c.remove("java1"));System.out.println(c);//7.public object[] toArray():把集合中的元素,存储到数组中。Object[] arr = c.toArray();System.out.println(Arrays.toString(arr));//可以用Arrays调用toString方法把数组打印出来//非要把集合转为字符串数组怎么办:/***用c调用toArray方法在括号里面new一个String类型的数组* 在中括号里面可以填上元素的大小* 这样就相当于指定了一个String类型的数组,也就是一个容器给到底层* 底层就会把集合中的元素遍历出来给到数组* 再去接她返回的结果就是一个String类型的数组返回给我们* 这样就会得到指定类型的数组*/String[] arr2 = c.toArray(new String [c.size()]);System.out.println(Arrays.toString(arr2));System.out.println("--------------------------------------------------------");//把一个集合的全部数据倒入到另一个集合中去Collection<String> c1 = new ArrayList<>();c1.add("java1");c1.add("java2");Collection<String> c2 = new ArrayList<>();c2.add("java3");c2.add("java4");c1.addAll(c2);//就是把c2集合中的全部数据(拷贝了一份倒进去)倒入到c1中去,(相当于批量添加数据了)注意:数据类型要相适应System.out.println(c1);System.out.println(c2);//c2的数据还是有的}
}
collection的遍历方式
1.迭代器(Iterator)
首先,一定要通过集合对象调用Iterator()方法,就会得到一个集合的迭代器对象,迭代器对象默认指向当前集合的第一个元素的;接着就可以用迭代器的常用方法来遍历集合。一个是hasNext()方法,一个是next()。
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class CollectionDemo1 {public static void main(String[] args) {Collection<String> c = new ArrayList<>();c.add("赵敏");c.add("小邵");c.add("速速");c.add("灭绝");System.out.println(c);//c = [赵敏, 小邵, 速速, 灭绝]// it//使用迭代去遍历集合//1.从集合对象中获取迭代器对象。Iterator<String> it = c.iterator();/*System.out.println(it.next());System.out.println(it.next());//从取完第一个之后,再从第二个System.out.println(it.next());//第三个System.out.println(it.next());//第四个*///System.out.println(it.next());//第五个没有就会出现异常,所以不要越界//2.应该使用循环结合迭代器遍历集合while(it.hasNext()){//如果有数据就会返回true 进到循环里面来String ele= it.next();//此时就使用next方法来取出数据,取出来之后会移到下一个位置System.out.println(ele);//System.out.println(it.next());}}
}
2.增强for
如果使用for循环,那么这个集合就必须要支持索引的,但collection并没有规定结合的索引问题,只有List集合才支持索引。所以collection是不支持直接用for循环来遍历的。
import java.util.ArrayList;
import java.util.Collection;public class CollectionDemo2 {public static void main(String[] args) {Collection<String> c = new ArrayList<>();c.add("赵敏");c.add("小邵");c.add("速速");c.add("灭绝");System.out.println(c);//c = [赵敏, 小邵, 速速, 灭绝]// ele//使用增强for循环遍历集合或者数组for (String ele : c) {System.out.println(ele);}//c.for再回车/*for (String els : c) {}*/String[] names = {"的卡拉", "大法师", "北京人", "咖啡馆"};for (String name : names){System.out.println(name);}}}
3.Lambda表达式
import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;public class CollectionDemo3 {public static void main(String[] args) {Collection<String> c = new ArrayList<>();c.add("赵敏");c.add("小邵");c.add("殷速速");c.add("周芷若");System.out.println(c);//c = [赵敏, 小邵, 殷速速, 周芷若]// s//default void forEach(Consumer<? super T> action): 结合Lambda表达式遍历集合://Consumer是一个接口不能直接创建对象 所以可以直接new一个匿名内部类对象出来c.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});System.out.println("--------------------------");c.forEach((String s) -> {System.out.println(s);});System.out.println("--------------------------");c.forEach(s -> System.out.println(s));System.out.println("--------------------------");c.forEach(System.out::println);}
}
案例:遍历集合中的自定义对象。
import java.util.ArrayList;
import java.util.Collection;/***目标:完成电影信息的展示* new Movie("《肖生克的救赎》",9.7,"罗宾斯")* new Movie("《霸王别姬》",9.6,"张国荣、张丰毅")* new Movie("《阿甘正传》",9.5,"汤姆.汉克斯")*/public class CollectionTest04 {public static void main(String[] args) {//1.创建一个集合容器负责存储多部电影对象Collection<Movie> movies = new ArrayList<>();//多态的方法定义一个collection类型的对象出来指向右边的集合容器对象//用这个集合容器负责存储多部电影对象用movies调add方法添加电影对象movies.add(new Movie("《肖生克的救赎》",9.7,"罗宾斯"));movies.add(new Movie("《霸王别姬》",9.6,"张国荣、张丰毅"));movies.add(new Movie("《阿甘正传》",9.5,"汤姆.汉克斯"));System.out.println(movies);//使用增强for循环遍历for (Movie movie : movies) {System.out.println("电影名:"+movie.getName());System.out.println("评分:"+movie.getScore());System.out.println("主演:"+movie.getActor());System.out.println("------------------------------------------------");}}
}
public class Movie {private String name;private Double score;private String actor;public Movie() {}public Movie(String name, Double score, String actor) {this.name = name;this.score = score;this.actor = actor;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Double getScore() {return score;}public void setScore(Double score) {this.score = score;}public String getActor() {return actor;}public void setActor(String actor) {this.actor = actor;}@Overridepublic String toString() {return "Movie{" +"name='" + name + '\'' +", score=" + score +", actor='" + actor + '\'' +'}';}
}
集合中存储的是元素对象的地址!
相关文章:

集合框架(一)Collection
学习过了ArrayList,知道集合是一种容器,用来装数据的,类似于数组,但集合的大小可变,开发中也非常常用。 为了满足不同的业务场景需求Java还提供了很多不同特点的集合给我们选择。 集合体系结构 Collection是一个接口&a…...

Android 性能优化--APK加固(2)加密
文章目录 字符串加密图片加密如何避免应用被重新签名分发APK 加壳的方案简析DEX加密原理及实现 本文首发地址:https://h89.cn/archives/212.html 最新更新地址:https://gitee.com/chenjim/chenjimblog 通过 前文 介绍,我们知晓了如何使用代码…...

Linux环境下使用interrupt方式操作UART
目录 概述 1 Linux环境下UART设备 2 轮询方式操作UART功能实现 2.1 打开串口函数:usr_serial_open 2.2 关闭串口函数: usr_serial_close 2.3 发送数据函数: usr_serial_sendbytes 2.4 接收数据函数: usr_serial_readinterr…...

修改Android打包apk的名字和目录
app打包生成apk后通常需要进行备份,但是要区分好哪个apk是什么版本的、什么时候打包的,以方便以后区分使用。 最开始的想法是把版本号、创建时间这些加在apk文件名上即可,但是公司要求apk使用一个固定的名称,那我怎么保存版本号信…...

管理 PostgreSQL 中配置参数的各种方法
管理 PostgreSQL 中配置参数的各种方法 1. 概述 PostgreSQL提供了一个配置文件 postgresql.conf 让用户自定义参数。您可能需要更改一些参数来调整性能或在工作环境中部署 PostgreSQL 服务器。在这篇博文中,我们将探索管理这些参数的不同方法。 2. 以不同方式管理…...
Linux命令-continue命令(结束本次循环,继续执行下一个for,while或until循环。)
概要 continue [n]主要用途 结束本次循环,继续执行下一个for,while或until循环;可指定从第几层循环继续执行。 参数 n(可选):大于等于1的整数,用于指定从第几层循环继续执行。 返回值 返回…...

智能部署之巅:Amazon SageMaker 引领机器学习革新
本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 亚马逊云科技开发者社区, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道。 (全球 TMT 2023年12月6日讯)亚马逊云科技在 2023 re:Invent 全…...

国内哪个工具可以平替chatgpt?国内有哪些比较好用的大模型gpt?
我自己试用了很多的平台,发现三个比较好的大模型平台,对普通用户也比较的友好的,而且返回内容相对来说,正确率更高的,并且相关场景插件比较丰富的国内厂商。 本文说的,是我自己觉得的,比较有主观…...
python如何打包py文件为exe
要将Python程序打包为可执行文件(.exe),您可以使用一些第三方工具。以下是两个常用的工具:PyInstaller和cx_Freeze。 使用PyInstaller PyInstaller是一个流行的Python打包工具,可以将Python程序及其所有依赖项打包为…...

yolov9网络结构图
文章目录 配置文件主干分支backbone预测头headyolov9网络结构图 系列文章目录 论文链接:👿 YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information代码链接:👿 https://github.com/WongKinYiu/yolov9…...

Spark 核心API
核心 API spark core API 指的是 spark 预定义好的算子。无论是 spark streaming 或者 Spark SQL 都是基于这些最基础的 API 构建起来的。理解这些核心 API 也是写出高效 Spark 代码的基础。 Transformation 转化类的算子是最多的,学会使用这些算子就应付多数的数…...

OpenLayers线性渐变和中心渐变(径向渐变)
目录 1.前言2.添加一个面要素3.线性渐变3.1 第一个注意点3.2 第二个注意点 4.中心渐变(径向渐变)5.总结 1.前言 OpenLayers官网有整个图层的渐变示例,但是没有单个要素的渐变示例,我们这里来补充一下。OpenLayers中的渐变是通过fi…...
[210. 课程表 II] 拓扑排序模板(DFS+BFS)
Problem: 210. 课程表 II 文章目录 思路解题方法Code 思路 本题是经典拓扑排序模板,通过DFS和BFS两种方式进行实现。 解题方法 DFS DFS方法的重点在于如何标记节点状态,初做题者如果只用未访问和已访问两种状态很容易陷入死结。正确的做法是使用三种状…...
我的第一个python web 网站
# -*- coding: utf-8 -*-import http.server import socketserver from datetime import datetimePORT 8000import sys# ...class MyHandler(http.server.SimpleHTTPRequestHandler):def do_GET(self):if self.path /:# 如果路径是根路径,返回页面内容self.send_r…...

产品展示型wordpress外贸网站模板
孕婴产品wordpress外贸网站模板 吸奶器、待产包、孕妇枕头、护理垫、纸尿裤、孕妇装、孕婴产品wordpress外贸网站模板。 https://www.jianzhanpress.com/?p4112 床品毛巾wordpress独立站模板 床单、被套、毛巾、抱枕、靠垫、围巾、布艺、枕头、乳胶枕、四件套、浴巾wordpre…...

四信全球化拓展再启新篇!LoRa传感器与云平台领航智能感知时代
随着科技浪潮的不断推进,物联网已逐渐融入我们的生活。刚刚结束的MWC24盛会上,四信带来了一系列前沿技术成果,不仅将5G技术成功扩展至当前市场主流类型的终端,更携手联通、ASR等业界巨头,在连接、5G RedCap、AI、LoRa以…...

阿里云k8s环境下,因slb限额导致的发布事故
一、背景 阿里云k8s容器,在发布java应用程序的时候,客户端访问出现500错误。 后端服务是健康且可用的,网关层大量500错误请求,slb没有流入和流出流量。 经过回滚,仍未能解决错误。可谓是一次血的教训,特…...
【STM32+OPENMV】矩形识别
一、准备工作 有关OPENMV最大色块追踪及与STM32通信内容,详情见【STM32HAL】与OpenMV通信 二、所用工具 1、芯片:STM32F103C8T6 2、CUBEMX配置软件 3、KEIL5 4、OPENMV 三、实现功能 寻找黑色矩形,并将最大矩形的四个边缘坐标发送给STM…...

在吗?腾讯云服务器优惠价格表曝光_2023年3月报价请过目!
腾讯云服务器多少钱一年?61元一年起,2核2G3M配置,腾讯云2核4G5M轻量应用服务器165元一年、756元3年,4核16G12M服务器32元1个月、312元一年,8核32G22M服务器115元1个月、345元3个月,腾讯云服务器网txyfwq.co…...

Revit-二开之创建Plane-(7)
2016版本的Plane 2017版本的Plane 2018版本及以上版本的Plane 由此可见2017版本是一个分水岭 #if REVIT2016Plane plane = new Plane(uiDoc.Document.ActiveView...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...