Java开发——24.Collection单列集合_List\Set+Collections

简介: Collection单列集合:List 、 Set.

集合的体系:

集合可以分为两大类(都是java.util包下的):单列集合(Collection)双列集合(Map)


image.png


List集合:

有序集合(也称为序列 )。 该界面的用户可以精确控制列表中每个元素的插入位置。 用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。

API

List子接口集合特点:存储元素有序,元素可重复(底层是数组存储,有索引区分相同值);

List子接口集合主要的是实现类:ArrayList、LinkedList。

网络异常,图片无法展示
|


ArrayList:


//构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。 //可以实现把List集合放在Set集合中,显示为无序 //可以实现把Set集合放在List集合中,实现使用下标访问Set集合中的元素,但是注意Set集合只能无序一次ArrayList(Collection<? extends E> c) 
//返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。indexOf(Object o)


LinkedList:

双链表实现了List和Deque接口。 实现所有可选列表操作,并允许所有元素(包括null )。  

所有的操作都能像双向列表一样预期。 索引到列表中的操作将从开始或结束遍历列表,以更接近指定的索引为准。

API

//弹栈:从此列表所表示的堆栈处弹出一个元素。publicEpop()
//入栈:将元素推入此列表所表示的堆栈。publicvoidpush(Ee)
publicstaticvoidmain(String[] args) {
LinkedListlist=newLinkedList();
list.push("a");
list.push("b");
list.push("c");
//此处不能使用循环的方式进行元素打印,因为pop是弹栈,栈中的元素数量会改变System.out.println(list.pop());
System.out.println(list.pop());
System.out.println(list.pop());
 }
/*输出结果:(采用堆栈的方式进行数据的存储,)cba*/


Vector:

Vector类实现了可扩展的对象数组。 像数组一样,它包含可以使用整数索引访问的组件。 但是, Vector的大小可以根据需要增长或缩小,以适应在创建Vector之后添加和删除项目。

API


//往集合中添加内容(该类特有)vt.addElement();
//获取取集合中的内容Enumerationen=vt.elements();
//遍历取值while(en.hasMoreElements()){
Objectobj=en.nextElement();
System.out.println(obj);
        }


ArrayList、LinkedList以及vector的区别:

ArrayList 底层用数组存储内容,添加和删除数据慢,查询数据快,线程不安全;

LinkedList 底层使用双链表存储内容,添加和删除数据快,查询数据慢;

vector底层使用数组,线程安全,效率低。


Set集合:

不包含重复元素的集合。 更正式地,集合不包含一对元素e1和e2 ,使得e1.equals(e2) ,并且最多一个空元素。

Set子接口集合特点:存储元素无序,元素不可重复(没有索引区分,所以值唯一);

Set子接口集合主要的实现:HashSet、LinkedHashSet。

Set集合只能把数组无序一次,并不能实现多次将同一个Set集合中的元素实现多次无序。


HashSet:

此类实现Set接口,由哈希表(实际为HashMap实例)支持。 对集合的迭代次序不作任何保证; 特别是,它不能保证订单在一段时间内保持不变。 这个类允许null元素。

API

HashSet底层如何实现数据不重复,就是采用了HashMap的原理,在后续学习HashMap的时候就会解开神秘的面纱。

注意:“对集合的迭代次序不作任何保证是存储顺序和打印顺序不一致,无法实现已知的元素输出顺序,完全随机,并只随机一次。


LinkedHashSet:

哈希表和链表实现了Set接口,具有可预测的迭代次序。 这种实现不同于HashSet,它维持于所有条目的运行双向链表。 该链表定义了迭代排序,它是将元素插入集合(插入顺序 ) 的顺序

API


TreeSet:

以 二叉树的形式进行数据记录。该集合不允许存null;

该集合中值,会根据自然排序法进行顺序排列


List集合和Set集合的相互转换:


publicstaticvoidmain(String[] args) {
//list --> setList<String>list=newArrayList<>();
list.add("a");
list.add("b");
list.add("b");
Set<String>set=newHashSet<>(list);    
System.out.println("====================");
//set --> listSet<String>sets=newHashSet<>();
sets.add("a");
sets.add("b");
sets.add("c");
List<String>lists=newArrayList<>(sets);
    }


Collections:

Collections,集合的工具类,注意后续学习的Map集合也是可以使用的,它是集合的工具类!

此类仅由静态方法组合或返回集合。 它包含对集合进行操作的多态算法——“包装器”,返回由指定集合支持的新集合,以及其他一些可能的和最终的集合。

API


//将指定的列表按升序排序publicstaticvoidsort(List<T>list)
//反转指定列表中元素的顺序publicstaticvoidreverse(List<?>list)
//获取集合中最大值/最小值publicstaticvoidmax()
publicstaticvoidmin()
publicstaticvoidmain(String[] args) {
//创建集合对象List<Integer>list=newArrayList<Integer>();
//添加元素list.add(30);
list.add(20);
list.add(50);
list.add(10);
list.add(40);
// 将指定的列表按升序排序Collections.sort(list);
//反转指定列表中元素的顺序Collections.reverse(list);
//获取集合是最大值Integermax=Collections.max(list);
System.out.println(max);//50//获取集合是最小值Integermin=Collections.min(list);
System.out.println(min);//10System.out.println(list);
    }
}


collection和collectons的区别?

Collection 是一个集合接口  它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。

Collections 是一个操作集合的工具类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

相关文章
|
2月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
3月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
3月前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
156 0
|
4月前
|
JavaScript 安全 前端开发
Java开发:最新技术驱动的病人挂号系统实操指南与全流程操作技巧汇总
本文介绍基于Spring Boot 3.x、Vue 3等最新技术构建现代化病人挂号系统,涵盖技术选型、核心功能实现与部署方案,助力开发者快速搭建高效、安全的医疗挂号平台。
260 3
|
4月前
|
安全 Java 数据库
Java 项目实战病人挂号系统网站设计开发步骤及核心功能实现指南
本文介绍了基于Java的病人挂号系统网站的技术方案与应用实例,涵盖SSM与Spring Boot框架选型、数据库设计、功能模块划分及安全机制实现。系统支持患者在线注册、登录、挂号与预约,管理员可进行医院信息与排班管理。通过实际案例展示系统开发流程与核心代码实现,为Java Web医疗项目开发提供参考。
257 2
|
4月前
|
安全 Oracle Java
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
350 0
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
|
5月前
|
并行计算 Java API
Java List 集合结合 Java 17 新特性与现代开发实践的深度解析及实战指南 Java List 集合
本文深入解析Java 17中List集合的现代用法,结合函数式编程、Stream API、密封类、模式匹配等新特性,通过实操案例讲解数据处理、并行计算、响应式编程等场景下的高级应用,帮助开发者提升集合操作效率与代码质量。
258 1
|
5月前
|
安全 Java API
Java 17 及以上版本核心特性在现代开发实践中的深度应用与高效实践方法 Java 开发实践
本项目以“学生成绩管理系统”为例,深入实践Java 17+核心特性与现代开发技术。采用Spring Boot 3.1、WebFlux、R2DBC等构建响应式应用,结合Record类、模式匹配、Stream优化等新特性提升代码质量。涵盖容器化部署(Docker)、自动化测试、性能优化及安全加固,全面展示Java最新技术在实际项目中的应用,助力开发者掌握现代化Java开发方法。
269 1
|
4月前
|
移动开发 Cloud Native 安全
Java:跨平台之魂,企业级开发的磐石
Java:跨平台之魂,企业级开发的磐石