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框架。

相关文章
|
18天前
|
前端开发 Java 程序员
菜鸟之路day02-04拼图小游戏开发一一JAVA基础综合项目
本项目基于黑马程序员教程,涵盖面向对象进阶、继承、多态等知识,历时约24小时完成。项目去除了登录和注册模块,专注于单机游戏体验。使用Git进行版本管理,代码托管于Gitee。项目包含窗体搭建、事件监听、图片加载与打乱、交互逻辑实现、菜单功能及美化界面等内容。通过此项目,巩固了Java基础并提升了实际开发能力。 仓库地址:[https://gitee.com/zhang-tenglan/puzzlegame.git](https://gitee.com/zhang-tenglan/puzzlegame.git)
38 6
|
21天前
|
Java 应用服务中间件 API
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
37 5
|
21天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
25 4
|
21天前
|
SQL Java API
|
21天前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
36 2
|
2月前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
1073 1
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
1月前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
2月前
|
存储 缓存 安全
只会“有序无序”?面试官嫌弃的List、Set、Map回答!
小米,一位热衷于技术分享的程序员,通过与朋友小林的对话,详细解析了Java面试中常见的List、Set、Map三者之间的区别,不仅涵盖了它们的基本特性,还深入探讨了各自的实现原理及应用场景,帮助面试者更好地准备相关问题。
69 20
|
2月前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
146 13
|
2月前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
101 10