Java中Collection集合

【Java集合 1】Java集合,Collection接口,Iterator接口 全网最细Java零基础手把手入门教程,系列课程包括:基础篇、集合篇、Java8新特性、多线程、代码实战,持续更新中(每周1-2篇),适合零基础和进阶提升的同学。 阅读详情

集合体系图

集合和数组的比较

数组:存储同一种数据类型

 特点:

       1.只能存储一种数据类型

       2.一旦初始化,长度固定

       3.数组元素的内存地址是连续的

       4.Object类型的数组可以存储任意类型的元素

 需求:收集同学的兴趣爱好

 集合:存储对象数据的集合容器

 优势:

1. 集合可以存储任意类型的对象信息,数组只能存储同一类型对象信息(Object除外)

2.集合的长度是任意变化的,数组长度是固定的

 

集合的体系结构

--|Collection:单列集合的根接口,表示一组对象

----|List 实现List接口的集合类,特点:有序可以重复

------|ArrayList 维护Object数组实现的,特点:查询快,增删慢

------|LinkedList 底层使用链表数据结构实现的,特点:查询慢,增删快

------|Vector 底部维护Object数组,实现和ArrayList一样,但是Vector是线程安全,效率低

----|Set 实现Set接口的集合类,特点:无序,不可重复

------|HashSet 底层是使用了哈希表来支持的,特点: 存取速度快.

--------|特点:hashSet的实现原理:

           往Haset添加元素的时候,HashSet会先调用元素的hashCode方法得到元素的哈希值 ,

          然后通过元素的哈希值经过移位等运算,就可以算出该元素在哈希表中的存储位置。

          情况1:如果算出元素存储的位置目前没有任何元素存储,那么该元素可以直接存储到该位置上。

 情况2: 如果算出该元素的存储位置目前已经存在有其他的元素了,那么会调用该元素的equals方法与该位置的元素再比较一次,如果equals返回的是true,那么该元素与这个位置上的元素就视为重复元素,不允许添加,如果equals方法返回的是false,那么该元素运行添加。

------|TreeSet

--------|如果元素具备自然顺序的特性,那么就按照元素自然顺序的特性进行排序

双例集合体系

双列集合:

   Map:实现Map接口的集合类,具备的特点:存储的数据都是以键值对的方式,键不可以重复,值可重复

   --|HashMap

底层使用hashCode表来实现向HashMap中添加元素的时候,首先调用键的hashCode方法得到元素的哈希码的值,经过运算,得到该元素在哈希表中的位置;

   1.如果该位置没有存储元素,则元素之间添加到哈希表中

   2.如果该位置有其他的元素,会调用元素的equals方法,如果返回false,该元素被储存,返回true,该元素重复不能存储

   --|TreeMap

TreeMap:基于二叉树的数据结构实现的,会对具备自然特性的键进行排序存储

1.元素的键具备自然特性,直接排序存储

2.不具备自然特性,实现Comparable接口,在ComparaTo中定义排序规则

3.不具备自然特性,没有实现Comparable接口,在创建TreeMap对象的时候传入比较器

   --|HashTable

collection集合

基本使用

package com.cloud.day1;
import java.util.ArrayList;
import java.util.Collection;
/*
--|Collection:单列集合的根接口,表示一组对象
----|List 实现List接口的集合类,特点:有序可以重复
----|Set  实现Set接口的集合类,特点:无序,不可重复
Collection中的方法
	添加
	add(E e) 
	addAll(Collection<? extends E> c) 
	
	删除
	clear() 
	remove(Object o)
	removeAll(Collection<?> c)
	retainAll(Collection<?> c)
	
	查看
	size() 
	
	判断
	contains(Object o) 
	containsAll(Collection<?> c) 
	equals(Object o) 
	isEmpty() 
	
	迭代
	iterator() 
	toArray()
 */
 
public class Demo1 {
	public static void main(String[] args) {
		Collection test=new ArrayList();
		test.add("SHsH");
		test.add("sjf");
		test.add(1);
		Collection c=new ArrayList();
		c.add("Spring");
		c.add(1);
		c.addAll(test);
		System.out.println("添加成功返回值?"+c.add("Summer"));
		//c.clear();
		c.remove("sjf");
		//c.removeAll(test);//删除两个集合的交集
		c.retainAll(test);//保留c集合和test集合的交集元素,其余删除
		
		System.out.println(c);
	}
}	

集合中的函数判断

package com.cloud.day1;
import java.util.ArrayList;
import java.util.Collection;
public class Demo2 {
	public static void main(String[] args) {
		Collection<Person> all=new ArrayList<Person>();
		all.add(new Person(1,"Spring1"));
		all.add(new Person(2,"Spring2"));
		all.add(new Person(3,"Spring3"));
		all.add(new Person(4,"Spring4"));
		System.out.println("判断包含:"+all.contains(new Person(1,"Spring1")));
		System.out.println(all);
	}
}
class Person{
	private int id;
	private String name;
	public Person(int id,String name){
		this.id=id;
		this.name=name;
	}
	public String toString() {
		return "编号:"+this.id+";姓名:"+this.name;
	}
	/**
	 * 重写比较方法
	 */
	public boolean equals(Object obj) {
		Person p=(Person) obj;//向下转型
		return this.id == p.id;
	}
	/**
	 * java的规范,重写equals方法就会重写hashCode方法
	 */
	public int hashCode() {
		return this.id;
	}
}

迭代输出集合元素

package com.cloud.day1;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo3 {
	public static void main(String[] args) {
		Collection c=new ArrayList();
		c.add("Spring1");
		c.add("Spring2");
		c.add("Spring3");
		/*迭代器输出元素
		Iterator it=c.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
		
		
		for(Iterator it=c.iterator();it.hasNext();){
			System.out.println("["+it.next()+"]");
		}
		*/
		//remove:方法删除最后一次返回的元素
//		Iterator it=c.iterator();//这时候获取一个迭代器还没有获取元素
//		it.next();
//		it.remove();//删除Spring1
		
//		Iterator it=c.iterator();//这时候获取一个迭代器还没有获取元素
//		it.next();
//		it.next();
//		it.remove();//删除Spring2
		
		//删除全部
		Iterator it=c.iterator();//这时候获取一个迭代器还没有获取元素
		while (it.hasNext()){
			it.next();
			it.remove();
		}
		System.out.println(c);
	}
}

模拟登录注册案例

package com.cloud.day1;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Scanner;
public class Demo4 {
	/**
	 * @param模拟注册登录的案例
	 * 1.如果用户名和密码已经存在,则注册失败
	 * 2.则注册成功
	 */
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		Collection users=new ArrayList();
		while(true){
			System.out.println("请选择功能:A.注册  B.登录");
			String option=scanner.next();
			if("a".equalsIgnoreCase(option)){
				System.out.println("你选择了注册功能");
				User user=null;
				while (true){
					System.out.println("请输入账号...");
					int id=scanner.nextInt();
					user=new User(id, null);
					if(users.contains(user)){
						System.out.println("该用户已经存在,重新输入...");
					}
					else{
						break;
					}
				}
				System.out.println("请输入密码...");
				String password=scanner.next();
				user.setPassword(password);
				//存入集合中
				users.add(user);
				System.out.println("注册成功");
				System.out.println("注册人员信息"+users);
				/*
				System.out.println("你选择注册功能");
				while(true){
					System.out.println("请输入账号...");
					int id=scanner.nextInt();
					//遍历集合是否存在该账号
					Iterator it=users.iterator();
					while(it.hasNext()){
						User user=(User) it.next();
						if(user.id==id){
							System.out.println("该账号已经被注册,重新输入...");
							break;
						}
					}
				}
				*/
			}
			else if("b".equalsIgnoreCase(option)){
				System.out.println("你选择登录功能");
				System.out.println("请输入账号...");
				int id=scanner.nextInt();
				System.out.println("请输入密码...");
				String password=scanner.next();
				//遍历集合元素查看用户信息
				boolean isLogin=false;
				Iterator it=users.iterator();
				while(it.hasNext()){
					User user=(User) it.next();
					if(user.id==id && user.password.equals(password)){
						isLogin=true;
					}
				}
				if(isLogin){
					System.out.println("欢迎进入...");
				}
				else{
					System.out.println("用户名或者密码错误");
				}
			}
			else{
				System.out.println("你的选择错误,重新输入");
			}
		}
	}

}
class User{
	int id;
	String password;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public User(int id,String password){
		this.id=id;
		this.password=password;
	}
	@Override
	public boolean equals(Object obj) {
		User user=(User) obj;
		return this.id==user.id;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "(账号:"+this.id+",密码:"+this.password+")";
	}
}

Collections集合的工具类

package com.cloud.collection;

 

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

/*

笔试题:Collection和Collections区别

Collection是单例集合的根接口

Collections是操作集合对象的工具类

 */

class Person{

   String name;

   int age;

   public Person(String name,int age){

      this.name=name;

      this.age=age;

   }

   @Override

   public String toString() {

      return "[姓名:"+this.name+";年龄:"+this.age+"]";

   }

}

//自定义一个比较器

class AgeComparator implements Comparator<Person>{

   @Override

   public int compare(Person o1, Person o2) {

      return o1.age - o2.age;

   }

}

public class Demo1 {

   public static void main(String[] args) {

      ArrayList<Integer> arr = new ArrayList<Integer>();

      arr.add(6);

      arr.add(4);

      arr.add(2);

      Collections.sort(arr);

      //二分查找,要先排序

      System.out.println("元素索引的位置:"+Collections.binarySearch(arr, 2));

      System.out.println("max="+Collections.max(arr));

      System.out.println("min="+Collections.min(arr));

      //数组翻转

      Collections.reverse(arr);

      System.out.println(arr);

      ArrayList<Person> arr1 = new ArrayList<Person>();

      arr1.add(new Person("a",5));

      arr1.add(new Person("c",3));

      arr1.add(new Person("b",6));

      AgeComparator act = new AgeComparator();

      Collections.sort(arr1, act);

      System.out.println(Collections.binarySearch(arr1, new Person("a",5),act));

      System.out.println(arr1);

   }

}

java集合框架Collection java集合框架 java.util.Collection接口 Collection接口中定义了所有集合都要具备的功能,它也是所有集合的顶级接口。 Collection下面有几种不同集合的分类,常见的两个: 1.java.util.List:List接口表示的是线性表,是有序的且可以存放重复元素的集合 * 2.java.util.Set:Set接口表示的是不可重复的集合 这里指的重复是元素是... 阅读详情

相关推荐

语音增强评价指标全解析:从MOS到eSTOI的实战指南

本文全面解析了语音增强领域的核心评价指标,包括主观评价的黄金标准MOS,以及PESQ、STOI、eSTOI等关键客观指标。文章详细阐述了各指标的原理、适用场景与实战计算方法,并提供了Python代码示例,旨在帮助开发者和研究者建立科学的评估体系,以平衡语音可懂度与音质,从而优化算法效果。

yhn456789的博客 1200

java 双列集合Map 万字详解

java 集合篇章——Map集合总结。

优快云 / 稀土掘金/ B站 / GitHub: Cyan_RA9 2240

STM32 SAES硬件加密协处理器全模式工程实践指南

AES(高级加密标准)是嵌入式系统中最基础且关键的对称密码算法,其硬件加速实现直接影响安全、性能与功耗平衡。Secure AES Coprocessor(SAES)作为STMicroelectronics在STM32U5等高安全MCU中集成的专用密码协处理器,不仅支持标准ECB/CBC/CTR模式,更原生兼容GCM和CCM等认证加密模式,具备抗侧信道、密钥保护与DMA卸载能力。理解其寄存器状态机(CHMOD/MODE/CPHASE)、NPBLB数据对齐机制及GCM四阶段编程范式,是规避Tag校验失败、IV错

weixin_42311427的博客 77

Java之双列集合

比Set接口常用1.不同于单列集合只传一个对象,双列集合都是传两个对象2.Node类是HashMap的内部类符号表示HashMap$Nodenext把所有的Node元素连接然后对应数组索引可以调用到对应索引的第一个Node元素拿到第一个Node元素相当于后面都有了Node源码3和4.key不能重复,value可以重复,可以重复的话会替换原来key的value5.6.也可以用其他类的对象做key,因为形参是Objectkey7.通过如图。............

y_k_j_c的博客 939

OpenStack 8 节点生产级高可用(HA)集群实施文档

本文详细介绍了生产级高可用OpenStack集群的架构设计与实施方案。通过采用3节点控制集群(HAProxy+Keepalived)、2节点计算资源池和3节点Ceph分布式存储,实现了控制平面、计算资源和存储系统三个层面的高可用。方案重点阐述了VIP漂移、MariaDB Galera集群、RabbitMQ镜像队列等关键组件的配置方法,并提供了完整的部署流程和故障验证方案。该架构确保任意单节点故障不会影响平台整体可用性,满足生产环境对稳定性、扩展性和可维护性的要求,为构建无单点故障的OpenStack生产环境

彭大帅的博客 781

【Zephyr 系列 29】低功耗调试指南:电流测量、系统睡眠与功耗分析

Zephyr低功耗调试指南(150字摘要) 针对物联网设备续航需求,本文解析Zephyr低功耗调试方法:1️⃣ 机制:启用PM子系统和tickless idle,配置睡眠策略;2️⃣ 测量:推荐功耗分析仪捕捉μA级电流波动;3️⃣ 优化:管理唤醒源(如GPIO/RTC)、调整BLE广播/连接参数,挂起闲置外设;4️⃣ 分析:建立功耗文档,对比不同模式电流(如待机0.6mA vs广播3.2mA)。强调低功耗需系统性设计,初期即需纳入测试流程。下期将探讨Zephyr OTA升级实现。

hemoparrot的专栏 1180

在xml中collection、association的用法

在xml中collection、association用法

m0_52563512的博客 3542

基于 YOLOv26 的车辆违规停车检测系统:实时监控

本文提出了一种基于YOLOv26的车辆违规停车实时检测系统。系统采用多模块架构,包括视频预处理、YOLOv26目标检测、DeepSORT目标跟踪、停车区域定义、行为分析和违规判定等功能模块。关键技术包括使用YOLOv26s模型进行车辆检测,结合DeepSORT算法实现车辆跟踪,支持多种停车区域定义方式(多边形、矩形、限时区域等)。系统通过边缘计算平台部署,实现了对道路边、禁止停车区等场景的实时监控,能够准确识别长时间停车、禁止区域停车等违规行为,并触发告警机制。实验结果表明,该系统在车辆检测准确率和违规判定

一键难忘的博客 773

HashMap的底层原理jdk1.7和jdk1.8的实现的区别

HashMap的底层原理jdk1.7和jdk1.8的实现的区别

ratel的博客 1827

基于RAG(Retrieval Augmented Generation)架构的简单问答系统的Python实现示例

以下是一个基于RAG(Retrieval Augmented Generation)架构的简单问答系统的Python实现示例。这个系统使用langchain库进行文档处理、检索,以及与大语言模型交互。

max500600的博客 743

别把 ABAP 时间戳当数字算:TIMESTAMP / TIMESTAMPL 的语义、正确用法与项目级避坑指南

ABAP时间戳使用指南与常见陷阱 摘要:ABAP中的时间戳(TIMESTAMP/TIMESTAMPL)本质是UTC时间的数字表示,而非累计秒数。正确用法包括:直接比较时间戳顺序、使用CONVERT TIME STAMP进行时区转换、通过CL_ABAP_TSTMP计算时间差。关键注意事项:绝对不要对时间戳本身进行数学运算,否则会导致非法时间值。实际项目中需特别注意SAP Gateway的ETag处理、跨时区系统集成和CDS视图中的时间戳使用场景,避免将本地时间误存为UTC时间戳或在云迁移时产生时区问题。(14

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 346

浅说java的xml中的foreach用法

三、当mapper中的参数是多个,都需要绑定@Param注解,此时xml中collection的值是绑定注解的参数(无论参数是数组还是集合)如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array。如果传入的是单参数且参数类型是一个List的时候,collection属性值为list。在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,item :表示集合中的每一个元素。

qq_43380361的博客 2611

复现《水化硅铝酸钙微结构和性能的分子动力学模拟研究》的分子动力学模拟

本文详细复现了杨军博士论文中关于水化硅铝酸钙(C-A-S-H)凝胶的分子动力学模拟方法。研究内容包括:1)基于11Å Tobermorite构建C-A-S-H分子模型,通过缺陷引入和Al掺杂调节Ca/Si比;2)使用ReaxFF力场模拟交联C-A-S-H的结构与力学性能;3)采用ClayFF力场研究纳米孔道中水和离子传输行为。研究提供了完整的LAMMPS输入脚本、Python分析代码和力场参数设置,为水泥基材料纳米尺度模拟提供可复现的技术方案。

huanghm88的专栏 107

java集合进阶篇-《Collection集合》

java中的集合也是一个重点,同样也是难点,涉及到的东西较多较杂,希望大家能够和我一起来学习java集合进阶方面的知识。预计一周的时间将java集合进阶部分拿下,加油。在Java中,是一个接口,它是所有Java集合框架的根。它定义了集合类必须实现的基本操作,如添加元素、删除元素、迭代等。所有的集合类(如ListSetQueue等)都是Collection接口的直接或间接实现。

欢迎大家一起讨论交流 1053

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

java集合之——Collection接口

前言 老师在教我们学习集合的时候,大多都是以数组为砖,列举了对象数组有那些问题?比如普通的对象数组的最大问题在于数组中的元素个数是固定的,不能动态的扩充大小,所以最早的时候可以通过链表实现一个动态对象数组。但是这样做毕竟太复杂了,所以在 Java 中为了方便用户操作各个数据结构,所以引入了类集的概念,有时候就可以把类集称为 java 对数据结构的实现。 在整个类集中的,这个概念是从 JDK 1.2(Java 2)之后才正式引入的,最早也提供了很多的操作类,但是并没有完整的提出类集的完整概念。 类集中最大的几

you do ,you win 4310

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

JAVA学习-集合-Collection

认识集合,操作集合。

LOVEcao_YU的博客 979

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【JavaSE系列】Java集合框架之Collection,Map接口

本篇文章带大家认识Java基础知识——集合框架,从本篇文章开始正式拉开数据结构的序幕,要深入了解一件事,那必然先得见个面,本文带大家认识Java集合框长什么样,以及怎么使用Collection和Map接口。

未见花闻的博客 1832

【Java】集合之Collection概述

目录 一、前言 二、常见的集合概览图 三、Collection集合 1.Collection集合常用方法 2.Collection集合之迭代器 迭代器介绍 迭代器常用方法: 一、前言 集合在Java中的作用是显而易见的,他可以存储我们的信息,可以实现增删减改的 操作,相当于一个模拟的"数据库"。 二、常见的集合概览图 集合都是在java.util包下的,所以在使用时先导包。 三、Collection集合 public interface Collection&.

weixin_60719453的博客 2437

java集合Collection

Collection集合:分为单列集合 和 多列集合 单列集合:List、Set、Queue集合;多列集合:Map集合

LXMXHJ的博客 1611

Java——Collection集合

Collection集合

m0_72786443的博客 415

Java中的Collection集合

JAVASE提供了满足各种需求的API,在使用这些API前,先了解其继承与接口操作架构,才能了解何时采用哪个类,以及类之间如何彼此合作,从而达到灵活应用。 集合按照其存储结构可以分为两大类,分别是单列集合java.util.Collection和双列集合java.util.Map本文主要讲Collection集合,后续再补充Map集合。

write less , do more 3443

Java 集合框架(Collection)

这个方法允许你指定数组的类型,并且可以避免类型转换的开销。相关的方法,当然,Collection的功能List也都继承了。1.LinkedList集合的底层是基于什么实现的?① 如果集合支持索引,可以使用for循环遍历,每删除数据后做。获取集合的迭代器对象,对迭代器对象使用.next()方法。基于双链表的这种特点,LinkedList新增了很多。写累了,承受了这个年纪不该承受的(惆怅脸)…函数式接口的实现,这个实现可以是一个。就是removeFirst方法的套皮,来实现的,但隐藏了迭代器的实现细节。

m0_70484213的博客 1169

Java—— 单列集合 Collection

单列集合体系结构。Collection介绍。常用方法。Collection的遍历方式:迭代器遍历。增强for遍历。Lambda表达式遍历。

zjy_ccccc的博客 760

java中collection集合

可以把它理解成:一个 “装东西的容器”,这个容器规定了 “怎么加东西、怎么删东西、怎么看有多少东西”,但不规定 “东西怎么摆”(比如是有序还是无序、是否允许重复)。包下),它定义了一组用于操作「多个元素」的通用方法,是所有单列集合(区别于 Map 这种键值对集合)的 “总规则”。迭代器是 Collection 遍历的「标准方式」,专门用于安全地遍历集合(避免遍历中修改集合导致的异常)。注:Queue(队列)也是 Collection 的子接口,属于进阶内容,后面会讲。三、深入理解:迭代器 & 遍历(进阶)

wuilwxxxxx的博客 363

Java 的 Collection 集合体系

Java集合框架(JCF)提供了一套标准化的接口和实现,用于存储和操作对象组。核心接口包括: 1️⃣ Collection(单列集合根接口) 2️⃣ List(有序可重复,实现类:ArrayList、LinkedList等) 3️⃣ Set(无序唯一,实现类:HashSet、TreeSet等) 4️⃣ Queue(队列,含Deque双端队列) 主要特点: ArrayList基于动态数组,随机访问快;LinkedList基于链表,插入删除快 HashSet基于哈希表查询最快;TreeSet基于红黑树保持有序

2301_80215285的博客 1070

Java集合进阶 单列集合collection和list

Java当中一共有很多种集合之前学过的ArrayList只是其中的一类。Collection单列集合:添加一个元素Map双列集合:添加俩个元素。

2302_80073130的博客 2063
上一篇: Servlet中的编码
下一篇: JSP基本概念
午-夜
博客等级 码龄12年 95粉丝 133原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值