集合类小结

2024-09-03 05:38
文章标签 小结 集合

本文主要是介绍集合类小结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

容器——保存对象
1.Collection接口

一个独立元素序列,这些元素都服从一条或多条规则.List必须按照插入顺序保存元素,而Set不能有重复元素.Queue按照排队规则来确定对象产生的顺序(通常与它们插入的顺序相同).

2.Map接口

一组成对的"键值对"对象,允许你使用键来查找值.映射表允许我们使用另一个对象来查找某个对象,它也被称为关联数组,因为它将某些对象与另外一些对象关联在了一起;或者被称为"字典",因为你可以使用键对象来查找值对象,就像你在字典中使用单词来定义一样。Map是强大的编程工具.

一般情况下,我们应该创建一个具体的对象,将其转型为对应的接口,然后在其余的代码都使用这个接口.
如:List<Apple> apples=new ArrayList<Apple>();

但是当我们需要某些具有特殊功能的类时,就不能将它们向上转型为更通用的接口.

 

一.迭代器:
1.Iterator

public interface Iterator<E>
{
    E next();
    boolean hasNext();
    void remove();

}
Java的Iterator只能单向移动,这个Interator只能用来:
1).使用方法iterator()要求容器返回一个Iterator。Iterator将准备好的返回序列的第一个元素.
2).使用next()获得序列中的下一个元素.
3).使用hasNext()检查序列中是否还有元素.
4).使用remove()将迭代器新返回的元素删除.

注意:查找一个元素的唯一方法是调用next,而在执行查找操作的同时,迭代器的位置随之向前移动,Java迭代器是位于两个元素之间,调用next时,迭代器就越过下一个元素,并返回刚刚越过的那个元素的引用.因此在删除元素的时候,也就是使用remove()方法时,要首先调用next越过这个元素。


2.ListIterator
它是一个更加强大的Iterator的子类型,它只能用于各种List类的访问.尽管Iterator只能向前移动,但是ListIterator可以双向移动.它还可以产生相对于迭代器在列表中指向的当前位置的前一个和后一个元素的索引,并且可以使用set()方法替换它访问过的最后一个元素。

 

二.详细介绍
List(列表):集合中的对象按照索引位置排序,可以有重复的对象,允许按照对象在集合中的索引位置检索对象。List与数组有些相似。 ------有序,可重复
--ArrayList 
--LinkedList  非线程安全的
--Vector      线程安全,所有方法都是同步的.在同步操作上耗费大量时间.

注意:链表不支持快速地随机访问,如果要查看链表中的第n个元素,就必须从头开始,越过n-1个元素,没有捷径可走,鉴于这个原因,在程序中需要采用整数索引访问元素时,程序员通常不选用链表.在指定位置处插入元素时,链表却能发挥它的优势.使用链表的唯一理由是尽可能减少在列表中插入或删除元素所付出的代价.


Set(集合):集合中的对象不按照特定的方式排序,并且没有重复对象。 ------无序,不可重复
--HashSet类按照哈希算法来存取集合中的对象,存取速度比较快
--TreeSet类实现了SortedSet接口,具有排序功能

 

Map(映射):集合中的每一个元素包含一对 键对象、值对象,集合中没有重复的键对象,值对象可以重复。-------键不可,值可重复
--HashMap按照哈希算法来存取键对象,有很好的存取能力。
--TreeMap实现了SortedMap接口,能对键对象进行排序,和TreeSet一样,TreeMap也支持自然排序和客户化排序两种方式.默认情况下,树集假设它插入的元素实现了Comparable接口。
Map的输出方式

Set<Map.Entry<String,String>> set = map.entrySet();Iterator<Map.Entry<String,String>> it = set.iterator();while(it.hasNext()){Map.Entry<String, String> entry = it.next();System.out.println(entry.getKey()+"  "+entry.getValue());}

 

当在一个集合中要按两种方法排序,或者要对一个类的对象进行排序,而这个类的创建者又没有费心实现Conparable接口,那么我们可以将Comparator对象传递到TreeSet构造器来告诉树集使用不同的比较方法.

 创建一个Student类,有姓名,性别,分数等属性,按分数值排序

import java.util.Comparator;
public class Compare implements Comparator<Student>{@Overridepublic int compare(Student student1,Student student2) {if(student1.getScore()>student2.getScore())return 1;else if(student1.getScore()<student2.getScore())return -1;else return 0;}}public class TreeSetTest {private static Compare com=new Compare();public static void main(String[] args) {SortedSet<Student> ss=new TreeSet<Student>(com);Student[] s1=new Student[5];for(int i=0;i<5;i++){s1[i]=new Student("student"+i, "软工"+i,(int)(Math.random()*100));ss.add(s1[i]);}System.out.println(ss);}}


 

这篇关于集合类小结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1132174

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Go之errors.New和fmt.Errorf 的区别小结

《Go之errors.New和fmt.Errorf的区别小结》本文主要介绍了Go之errors.New和fmt.Errorf的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考... 目录error的基本用法1. 获取错误信息2. 在条件判断中使用基本区别1.函数签名2.使用场景详细对

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应