Java集合(一)

集合

概念:集合是Java API所提供的一系列类,可以用于动态存放多个对象。集合只能存对象集合与数组的不同在于,集合是大小可变的序列,而且元素类型可以不受限定,只要是引用类型。(集合中不能放基本数据类型,但可以放基本数据类型的包装类),集合类全部支持泛型,是一种数据安全的用法。

集合的继承关系

在这里插入图片描述

Collection

Collection接口的常用方法(其实现子类都可以使用)

方法名作用
int size()返回此collection中的元素数。
boolean isEmpty()判断此collection中是否包含元素。
boolean contains(Object obj)判断此collection是否包含指定的元素。
boolean contains(Collection c)判断此collection是否包含指定collection中的所有元素。
boolean add(Object element)向此collection中添加元素。
boolean addAll(Collection c)将指定collection中的所有元素添加到此collection中
boolean remove(Object element)从此collection中移除指定的元素。
boolean removeAll(Collection c)移除此collection中那些也包含在指定collection中的所有元素。
void clear()移除些collection中所有的元素。
boolean retainAll(Collection c)仅保留此collection中那些也包含在指定collection的元素。
Iterator iterator()返回在此collection的元素上进行迭代的迭代器。
Object[] toArray()把此collection转成数组。

List接口

List接口是Java集合框架中的一个接口,继承自Collection接口。List接口用于表示一个有序、可重复的集合,可以通过索引(位置)来访问和修改其中的元素。List接口的常用实现类包括ArrayList、LinkedList和Vector等。

相对于Collection接口新增的方法

方法名功能
public Object get(int index)根据下标,返回列表中的元素
public Object add(int index, Object element)在列表的指定位置插入指定元素.将当前处于该位置的元素(如果有的话)和所有后续元素向右移动
public Object set(int index, Object element)用指定元素替换列表中指定位置的元素
public Object remove(int index)移除列表中指定位置的元素

List接口实现类

  • ArrayList
    ​ 数据结构:一维数组
    ​ 特点:存储数据
  • LinkedList
    ​ 数据结构:双向列表
    ​ 特点:队列模式、栈模式
  • Vector
    ​ 数据结构:一维数组
    ​ 特点:线程安全
  • Stack
    ​ 继承关系:class Stack extends Vector,底层为栈
    ​ 特点:栈模式
ArrayList

代码实现:

public class Test02 {
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<>();
		//添加数据
		list.add("吴彦祖");
		list.add("谢霆锋");
		list.add("刘宪华");
		list.add("彭于晏");
		list.add("周杰伦");
		//设置指定下标上的元素
		list.set(1, "王力宏");
		//获取指定下标上的元素
		String str = list.get(1);
		System.out.println("获取指定下标上的元素:" + str);//王力宏
		//获取元素个数
		int size = list.size();
		System.out.println("获取元素个数:" + size);//5
		//在指定下标上添加元素
		list.add(2, "薛之谦");
		ArrayList<String> newList1 = new ArrayList<>();
		Collections.addAll(newList1, "aaa","bbb","ccc","ccc");//利用集合工具类(Collections)批量添加元素
		list.addAll(newList1);//将newList1中所有的元素都添加到list集合里末尾的位置
		ArrayList<String> newList2 = new ArrayList<>();
		Collections.addAll(newList2, "xxx","xxx","yyy","yyy","zzz","zzz");//利用集合工具类(Collections)批量添加元素
		list.addAll(3, newList2);//将newList2中所有的元素都添加到list集合里指定下标的位置
		//清空集合里所有的元素
		//list.clear();
		System.out.println("判断集合中是否包含指定元素:" + list.contains("王力宏"));//true
		System.out.println("判断集合中是否包含指定集合:" + list.containsAll(newList1));//true
		System.out.println("获取元素在集合中第一次出现的下标:" + list.indexOf("ccc"));//12
		System.out.println("获取元素在集合中最后一次出现的下标:" + list.lastIndexOf("ccc"));//13
		
		//没有-true,有-false
		System.out.println("判断集合里是否没有元素:" + list.isEmpty());//false
		list.remove(9);//通过下标删除元素
		list.remove("刘宪华");//通过数据删除元素
		list.removeAll(newList1);//将list中有newList1的元素全部删除(去除交集)
		list.retainAll(newList2);//将list中有newList2的元素全部保留(保留交集)
		List<String> subList = list.subList(1, 4);//从开始下标处(包含)截取到结束下标处(排他)的元素,返回新的集合
		//将集合转换为数组
		Object[] array1 = subList.toArray();
		System.out.println(Arrays.toString(array1));//[xxx, yyy, yyy]
		
		//将集合转换为指定类型的数组
		String[] array2 = new String[3];
		subList.toArray(array2);
		System.out.println(Arrays.toString(array2));//[xxx, yyy, yyy]
		System.out.println("-----------------------------------------");
		//遍历集合 -- for循环
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
		System.out.println("-----------------------------------------");
		//遍历集合 -- foreach
		for (String element : list) {
			System.out.println(element);
		}
		System.out.println("-----------------------------------------");
		//遍历集合 -- Iterator
		Iterator<String> it = list.iterator();
		while(it.hasNext()){//判断是否有可迭代的元素
			String next = it.next();//获取下一个元素
			System.out.println(next);
		}
		System.out.println("-----------------------------------------");
		//遍历集合 -- ListIterator
		ListIterator<String> listIterator = list.listIterator();
		while(listIterator.hasNext()){//判断是否有可迭代的元素
			String next = listIterator.next();//获取下一个元素
			System.out.println(next);
		}
	}
}
LinkedList

特有方法:

方法功能
void addFirst(E e)将指定元素插入到次列表的开头
void addLast(E e)将指定元素添加到此列表的结尾
E getFirst()返回此列表的第一个元素
E getLast()返回此列表的最后一个元素
E removeFirst()移除并返回此列表的第一个元素
E removeLast()移除并返回此列表的最后一个元素
E pop()从此列表所表示的堆栈处弹出一个元素
void push(E e)将元素推入此列表所表示的堆栈

独有方法的代码实现:

public class Test02 {
	public static void main(String[] args) {
		LinkedList<String> list = new LinkedList<>();
		list.add("王力宏");
		list.add("薛之谦");
		list.add("周杰伦");
		list.add("abc");
		list.add("abc");
		list.add("AAA");
		list.add("abc");
		list.add("abc");
		//添加到头部
		list.addFirst("aaa");
		list.offerFirst("bbb");
		list.push("ccc");
		//添加到末尾
		list.addLast("xxx");
		list.offer("yyy");
		list.offerLast("zzz");
		System.out.println("获取第一个元素:" + list.element());
		System.out.println("获取第一个元素:" + list.getFirst());
		System.out.println("获取第一个元素:" + list.peek());
		System.out.println("获取第一个元素:" + list.peekFirst());
		System.out.println("获取第一个元素:" + list.pop());
		System.out.println("获取最后一个元素:" + list.getLast());
		System.out.println("获取最后一个元素:" + list.peekLast());
		//删除第一个元素
		list.poll();
		list.pollFirst();
		list.removeFirst();
		//删除最后一个元素
		list.pollLast();
		list.removeLast();
		//删除第一次出现的元素
		list.removeFirstOccurrence("abc");
		//删除最后一次出现的元素
		list.removeLastOccurrence("abc");
		//倒序遍历
//		Iterator<String> descendingIterator = list.descendingIterator();
//		while(descendingIterator.hasNext()){
//			String next = descendingIterator.next();
//			System.out.println(next);
//		}
		
		for (String element : list) {
			System.out.println(element);
		}
	}
}
LinkedList实现队列模式
public class Test03 {
	public static void main(String[] args) {
		LinkedList<String> list = new LinkedList<>();
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		list.add("ddd");
		list.add("eee");
		while(!list.isEmpty()){
			//String element = list.pollFirst();
			String element = list.removeFirst();
			System.out.println(element);
		}
		System.out.println("集合的元素个数为:" + list.size());//0
	}
}
LinkedList实现栈模式
public class Test04 {
	public static void main(String[] args) {
		LinkedList<String> list = new LinkedList<>();
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		list.add("ddd");
		list.add("eee");
		while(!list.isEmpty()){
			String element = list.removeLast();
			System.out.println(element);
		}
		System.out.println("集合的元素个数为:" + list.size());//0
	}
}
Vector

vector的使用同ArrayList一致,不再赘述,这里只阐述一下Vector的以往实现方式

public class Test02 {
	/**
	 * 知识点:Vector老的方法
	 * 理解:Vector属于元老级别的集合类(JDK1.0),JDK1.2开始才有集合框架的概念,
	 * 		为了将Vector保留下来,Java的设计者让Vector多实现了List接口
	 */
	public static void main(String[] args) {
		Vector<String> v = new Vector<>();
		v.addElement("aaa");
		v.addElement("bbb");
		v.addElement("ccc");
		v.addElement("ddd");
		v.addElement("eee");
		v.removeElementAt(0);//根据下标删除元素
		v.removeElement("bbb");//根据数据删除元素
		Enumeration<String> elements = v.elements();
		while(elements.hasMoreElements()){
			String nextElement = elements.nextElement();
			System.out.println(nextElement);
		}
	}
}
Stack

代码实现:

public class Test01 {
	/**
	 * 继承关系:class Stack extends Vector
	 * 特点:栈模式	
	 */
	public static void main(String[] args) {
		Stack<String> stack = new Stack<>();
		//将元素添加到栈顶
		stack.push("aaa");
		stack.push("bbb");
		stack.push("ccc");
		stack.push("ddd");
		stack.push("eee");
		System.out.println("获取栈顶元素:" + stack.peek());
		System.out.println("获取元素到栈顶的距离:" + stack.search("bbb"));//4 - 从1开始数
		//判断集合是否为空内容
		while(!stack.empty()){
			//删除栈顶元素,并返回
			String pop = stack.pop();
			System.out.println(pop);
		}	
	}
}

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

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

相关文章

低边驱动与高边驱动

一.高边驱动和低边驱动 低边驱动(LSD): 在电路的接地端加了一个可控开关&#xff0c;低边驱动就是通过闭合地线来控制这个开关的开关。容易实现&#xff08;电路也比较简单&#xff0c;一般由MOS管加几个电阻、电容&#xff09;、适用电路简化和成本控制的情况。 高边驱动&am…

适合能源企业的文档安全外发系统应该是什么样的?

能源企业是市场经济中的重要组成&#xff0c;也是社会可持续长远发展的关键组成之一&#xff0c;能源行业在开拓新能源业务线、提升产能的日常经营中&#xff0c;也需要与外部合作伙伴、客户间进行密切的业务往来&#xff0c;文档可能涉及多个领域多个类型。 能源供应合同&…

【漏洞复现】电信网关配置管理系统 rewrite.php 文件上传漏洞

0x01 产品简介 中国电信集团有限公司(英文名称"China Telecom”、简称“"中国电信”)成立于2000年9月&#xff0c;是中国特大型国有通信企业、上海世博会全球合作伙伴。电信网关配置管理系统是一个用于管理和配置电信网络中网关设备的软件系统。它可以帮助网络管理员…

【Text2SQL 论文】DIN-SQL:分解任务 + 自我纠正 + in-context 让 LLM 完成 Text2SQL

论文&#xff1a;DIN-SQL: Decomposed In-Context Learning of Text-to-SQL with Self-Correction ⭐⭐⭐⭐ NeurIPS 2023, arXiv:2304.11015 Code: Few-shot-NL2SQL-with-prompting | GitHub 文章目录 一、论文速读1.1 Schema Linking Module1.2 Classification & Decompo…

【火炬打宝策略】

打宝策略刷遗物&#xff1a; 时可4 只刷奇诊加稀有度&#xff0c;没有奇诊可以直接不打。

服装连锁店收银系统需要具备的五大功能

当今服装连锁店在市场竞争中需要拥有高效的收银系统来提升业务效率和顾客满意度。以下是服装连锁店收银系统需要具备的五大功能&#xff1a; 首先&#xff0c;完善的商品管理功能是至关重要的。这包括商品信息的录入、管理、更新和查询。收银系统应该能够快速而准确地识别商品&…

STP----生成树协议

目的&#xff1a;解决二层环路问题 跨层封装 广播风暴---广播帧在二层环路中形成逆时针和顺时针转动环路&#xff0c;并且无限循环&#xff0c;最终造成设备宕机&#xff0c;网络瘫痪。 MAC地址表的翻摆&#xff08;漂移&#xff09;---同一个数据帧&#xff0c;顺时针接收后记…

《逆水寒》手游周年庆,热度不减反增引发热议

易采游戏网5月31日最新消息&#xff1a;随着数字娱乐时代的飞速发展&#xff0c;手游市场的竞争愈发激烈。在这样的大背景下&#xff0c;《逆水寒》手游以其独特的古风武侠世界和深度的社交体验&#xff0c;自上线以来便吸引了无数玩家的目光。如今&#xff0c;这款游戏迎来了它…

Flink搭建

目录 一、standalone模式 二、Flink on Yarn模式 一、standalone模式 解压安装Flink [rootbigdata1 software]# tar -zxvf flink-1.14.0-bin-scala_2.12.tgz -C /opt/module/ [rootbigdata1 module]# mv flink-1.14.0/ flink-standalone 2.进入conf修改flink-conf.yaml job…

汇总区间,合并区间

题目一&#xff1a; 代码如下&#xff1a; vector<string> summaryRanges(vector<int>& nums) {vector<string> ret;if (nums.size() 0)return ret;int n nums.size();int i 0;while (i < n){int prev i;i;while (i < n && nums[i] n…

java使用资源过高排查

在生产环境中有可能出现某java程序使用资源特别严重&#xff0c;这就需要找到该java进程&#xff0c;然后通过进程去找到是哪个线程的问题&#xff0c;这里我们就是用pidstat工具来排查一下 安装pidstat工具 yum -y install sysstat 查看java服务的pid jps 通过pid查看线…

Feign:使用接口方式调用服务

一、什么是Feign Feign是一个http请求调用的轻量级框架&#xff0c;可以以Java接口注解的方式调用Http请求&#xff0c;而不用像Java中通过封装HTTP请求报文的方式直接调用。Feign通过处理注解&#xff0c;将请求模板化&#xff0c;当实际调用的时候&#xff0c;传入参数&…

【模型架构】学习RNN、LSTM、TextCNN和Transformer以及PyTorch代码实现

一、前言 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;模型架构的不断发展极大地推动了技术的进步。从早期的循环神经网络&#xff08;RNN&#xff09;到长短期记忆网络&#xff08;LSTM&#xff09;、Transformer再到当下火热的Mamba&#xff08;放在下一节&a…

ES升级--02--kibana安装与启动

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Kibana官网文档https://www.elastic.co/guide/cn/kibana/current/targz.html 1.官网下载https://www.elastic.co/cn/downloads/past-releases#kibana 2.解压软件3.配…

揭秘百度不为人知的“秘密”(免费AI工具一直就在身边)

文章目录 &#x1f4d6; 介绍 &#x1f4d6;&#x1f3e1; 演示环境 &#x1f3e1;&#x1f4d2; 文章内容 &#x1f4d2;&#x1f4a1; 功能介绍&#x1f388; 海量图片资源&#x1f388; AI图像处理工具&#x1f388; 图像生成功能 &#x1f4e2; 获取方式⚓️ 相关链接 ⚓️…

防止数据泄露的方法你知道几种?哪种好用?

一、好用的防泄密方法是哪种&#xff1f; 简单且好用的防泄密方法则是使用数据加密防泄密系统&#xff0c;保护企业数据安全&#xff0c;防止泄露问题的出现&#xff0c;维护各方利益。那么&#xff0c;哪个防泄密系统好用呢&#xff1f;比如&#xff1a;迅软加密防泄密系统等…

python | 类的实现

和实例有关的&#xff0c;通过对象名&#xff0c;打点调用 实例属性&#xff0c;实例方法 stuStudent("XiaoMing",18) print(stu.name) 类属性、静态方法和类方法都是通过类名直接调用 Student.name 静态方法和类方法都不能调用实例属性和实例方法 动态绑定 如果是函…

【html】用html模拟微信布局

您做的这个模拟微信布局的作品很不错,使用了Flexbox布局来实现元素的灵活排列。以下是关于您代码的一些分析和建议: 效果图: 代码分析: 全局样式重置: 您使用了* { margin: 0; padding: 0; }来重置所有元素的边距。这是一个常见的做法,可以避免不同浏览器默认样式的差…

服务器的初始化

服务器的初始化 新的服务器到手&#xff0c;部署服务器的初始化。 1、配置ip地址 网关 dns解析&#xff08;static&#xff09;内网和外网 2、安装源&#xff0c;外网&#xff08;在线即可&#xff09;内网&#xff08;只能用源码包编译安装&#xff09; 3、磁盘分区&#…

Python零基础-下【详细】

接上篇继续&#xff1a; Python零基础-中【详细】-CSDN博客 目录 十七、网络编程 1、初识socket &#xff08;1&#xff09;socket理解 &#xff08;2&#xff09;图解socket &#xff08;3&#xff09;戏说socket &#xff08;4&#xff09;网络服务 &#xff08;5&a…