Java:类集(List,Vector,Set,HashMap)

news2024/9/24 9:24:40

类集:就是一个动态的对象数组,是对一些实现好的数据结构的包装,这样在使用时会非常方便,而且最重要的是类集框架本身不受对象数组长度的限制。

类集的特性:(1)这种框架是高性能的,对基本类集(动态数组、链接表、树和散列表)的实现是高效率的。所以一般很少需要人工对这些"数据引擎"编写代码。(2)框架必须允许实现不同类型的类集以相同的方式和高度互操作方式工作。(3)类集必须是容易扩展和修改的。为了实现这一目标,类集框架被设计成包含了一组标准接口。

常用的接口有:Collection、List、Set、Map、Iterator、ListIterator、Enumeration、SortedSet、SortedMap、Queue、Map.Entry。

接口 描述
Collection 是存放一组单值的最大父接口,所谓的单值是指集合中的每个元素都是一个对象。在新的开发标准中已经很少直接使用此类接口进行操作。
List 是Collection接口的子接口,也是最常用的接口。此接口对Collection接口进行了大量的扩展,里面的内容是允许重复的。
Set 是Collection接口的子类,没有对Collection接口进行扩充,里面不允许存放重复的元素。
Map 是存放一对值的最大父接口,即接口中的每个元素都是一对,以key——value的形式保存。
Iterator 集合的输出接口,用于输出集合中的内容,只能进行从前到后的单项输出。
ListIterator 是Iterator的子接口,可以进行由前向后或有后向前的双向输出。
Enumeration 是最早的输出接口,用于输出指定集合中的内容。
SortedSet 单值的排序接口,实现此接口的集合类,里面的内容可以使用比较器排序。
SortedMap 存放一对值的排序接口,实现此接口的集合类,里面的内容按照key排序,使用比较器排序。
Queue 队列接口,此接口的子类可以实现队列操作。
Map.Entry Map.Entry的内部接口,每个Map.Entry对象都保存着一对key——value的内容,每个Map接口中都保存有多个Map.Entry接口实例。

1,Collection接口和Collections类

1.1,Collection接口

public interface Collection<E> extends Iterable<E>

从接口中可以定义,此接口使用了泛型的定义,在操作时必须指定具体的操作类型。这样可以保证类集操作的安全性,避免ClassCastException异常。

Collection接口时单值存放的最大父接口,可以向其中保存多个单值数据。

方法 描述
public boolean add(E o) 向集合中插入对象
public boolean addAll(Collection<? extends E> e) 将一个集合的内容插入进来
public boolean void clear() 清除此集合中的所有元素
public boolean contains(Object o) 判断某一个对象是否存在该集合中
public boolean containsAll(Collection<?> e) 判断一组对象是否在集合中存在
public boolean equals(Object o) 对象对比
public int hashCode() 哈希码
public boolean isEmpty() 集合是否为空
public Iterator<E> iterator() 为Iterator接口实例化
public boolean remove(Object o) 删除指定对象
public boolean removeAll(Collection<?> c) 删除一组对象
public boolean retainAll(Collection<?> c) 保存指定对象
public int size() 求出集合的大小
public Object[] toArray() 将一个集合变为对象数组
public <T> T[] toArray(T[] a) 指定好返回的对象数组类型

Collection接口虽然是集合的最大接口,但是如果直接使用Collection接口进行操作,则表示的操作意义不明确,所以在Java开发中不提倡直接使用Collection接口。主要接口如下:

  • List:可以存放重复的内容。
  • Set:不能存放重复的内容,所有的重复内容靠hashCode()和equals()两个方法区分。
  • Queue:队列接口。

1.2,Collections类(集合操作类)

Collections类常用方法及类型:

方法 类型 描述
public static <T> Collection<T> synchronizedXxx(Collection<T> c)  普通 将指定集合设置为线程同步。
public static final List EMPTY_LIST 常量 返回一个空的List集合
public static final Set EMPTY_SET 常量 返回空的Set集合
public static final Map EMPTY_MAP 常量 返回空的Map集合
public static <T> boolean addAll(Collection<? super T>c, T...a) 普通 为集合添加内容
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) 普通 找到最大的内容,按比较器排序
public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll) 普通 找到集合中的最小内容,按比较器排序
public static <T> boolean replaceAll(List<T> list,T oldVal, T newVal) 普通 用新的内容替换集合的指定内容
public static void reverse(List<?> list) 普通 集合反转
public static <T> int binarySearch(List<? extends Comparable<? super T>>list, T key) 普通 查找集合中的指定内容
public static final <T> List<T> emptyList() 普通 返回一个空的List集合
public static final <K,V> Map<K,V> emptyMap() 普通 返回一个空的Map集合
public static final <T> Set<T> emptySet() 普通 返回一个空的Set集合
public static final <T extends Comparable<? super T>> void sort(List<T> list) 普通 集合排序操作,根据Comparable接口进行排序
public static void swap(List<?> list,int i,int j) 普通 交换指定位置元素

1,创建线程同步集合

Collection c = Collections.synchronizedCollection(new ArrayList<>());
List list = Collections.synchronizedList(new ArrayList<>());
Set set = Collections.synchronizedSet(new HashSet<>());
Map map = Collections.synchronizedMap(new HashMap<>());

2,返回不可变的集合:因为在List、Set、Map集合中,返回的对象都是无法进行增加数据的,因为没有实现add()方法。

List<String> allList = Collections.EMPTY_LIST;
Set<String> allSet = Collections.EMPTY_SET;
allList.add("燕双嘤");
==========================================
报错

3,添加内容:addAll可以接收可变参数,然后可以传递任意多的参数作为集合的内容。

List<String> allList = new ArrayList<>();
Collections.addAll(allList,"燕双嘤","杜马","步鹰");
for (String s:allList){
    System.out.println(s);
}

4,反转集合中的内容

Collections.reverse(allList);

5,检索内容:直接通过Collection类中的binarySearch()方法完成内容的检索,中文在compareTo()方法下有BUG。

List<String> allList = new ArrayList<>();
Collections.addAll(allList,"燕双嘤","杜马","步鹰");
int name = Collections.binarySearch(allList,"燕双嘤");
System.out.println(name);

6,替换集合中的内容

Collections.replaceAll(allList,"步鹰","云建民");

7,集合排序

Collections.sort(allList);

8,交换指定位置的内容

Collections.swap(allList,0,2);

2,List接口

2.1,List接口的定义

public interface List<E> extends Collection<E>

List是Collection接口,其中可以保存各个重复的内容。但是与Collection不同的是,在List接口中大量地扩充了Collection接口,拥有了比Collection接口定义更多的方法定义。List接口比Collection接口扩充了更多的方法,而且此方法操作起来方便。但如果想要想使用此接口,则需要通过其子类进行实例化。

方法 描述
public void add(int index, E element) 在指定位置增加元素
public boolean addAll(int index, Collection<? extends E>) c 在指定位置增加一组元素
E get(int index) 返回指定位置的元素
public int indexOf(Object o) 查找指定位置的元素
public int lastIndexOf(Object o) 从后向前查找指定元素的位置
public ListIterator<E> listIterator() 为ListIterator接口实例化
public E remove(int index) 按指定位置删除元素
public List<E> subList(int fromIndex, int toIndex) 取出集合中的子集合
public E set(int index, E element) 替换指定位置的元素

2.2,数组集合:ArrayList

ArrayList的底层是用数组来实现的,默认第一次插入元素时创建大小为10的数组,超出限制时会增加 50%的容量,并且数据以 System.arraycopy() 复制到新的数组,因此最好能给出数组大小的预估值。按数组下标访问元素的性能很高,这是数组的基本优势。直接在数组末尾加入元素的性能也高,但如果按下标插入、删除元素,则要用System.arraycopy()来移动部分受影响的元素,性能就变差了,这是基本劣势。

ArrayList是List子类,可以直接通过对象的多态性为List接口实例化。

public class ArrayList<E> extends AbstractList<E> implements List<E>,RandomAccess,Cloneable,Serializable

可以看出ArrayList类继承了AbstractList类。此接口实现了List接口,所以可以直接使用ArrayList为List接口实例化。

public abstract

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汇舟问卷:从了解国外问卷工作室开始!

大家好&#xff0c;我是汇舟问卷。上个月有个互联网大厂上班的经理联系到我&#xff0c;向我们咨询了关于国外问卷调查工作室的情况。 他对当时稳定的生活状态感到担忧担忧&#xff1a;每月稳定的收入虽然足以应对家庭开支&#xff0c;却难以积蓄足够的资金&#xff0c;尤其是…

公布一批神马爬虫IP地址,真实采集数据

一、数据来源&#xff1a; 1、这批神马爬虫IP来源于尚贤达猎头公司网站采集数据&#xff1b; 2、数据采集时间段&#xff1a;2023年10月-2024年1月&#xff1b; 3、判断标准&#xff1a;主要根据用户代理是否包含“YisouSpider”&#xff0c;具体IP没做核实。 二、神马爬虫主…

Javascript前端基础面试(十)

MVVM Vue MVVM这一篇就够啦&#xff01;_vue r mvvm-CSDN博客 点容器内的图标,图标边框变成border 1px solid red&#xff0c;点空白处重置 <div id"container"> <img src"icon.png" alt"Icon" class"icon"> <!…

SpringSecurity登录认证流程及源码分析

目录 一 作用 二 流程及源码分析 一 作用 spring security作为spring家族中的一员&#xff0c;它的主要作用有两个&#xff0c;分别是认证和授权。 我们以前在实现登录功能的时候&#xff0c;前端会传来用户名和密码&#xff0c;然后我们根据前端传来的数据从用户表中的数据进…

【AI大模型】分布式训练:深入探索与实践优化

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 一、分布式训练的核心原理二、技术细节与实现框架1. 数据并行与模型并行2. 主流框架 三、面临的挑战与优化策略1. 通信开销2. 数据一致性3. 负载均衡 4.使用示例示例一&#xff1a;TensorFlow中的数据…

深入解析Kubernetes(K8s)的核心技术与应用

一、引言 在云计算和容器化技术迅猛发展的今天&#xff0c;Kubernetes&#xff08;简称K8s&#xff09;凭借其强大的容器编排和管理能力&#xff0c;成为了云原生时代不可或缺的基础设施。本文旨在深入探讨Kubernetes的核心技术、应用场景、优势与挑战&#xff0c;以及如何在实…

图创价值 Live——解锁能源新未来!能源行业图技术解决方案深度探索

随着全球能源结构的深刻变革&#xff0c;能源系统正面临着前所未有的挑战与机遇。新能源的迅猛发展、电力市场化的推进以及电网调度的复杂性不断升级&#xff0c;都对能源系统的智能化、高效化提出了更高要求。为此&#xff0c;我们特别邀请了到了悦数解决方案专家-鲍翰林&…

数据结构第1天作业 7月31日

2.3按位置操作 1&#xff09;按照位置插入数据 void Insert_seqlist_single(Seqlist* sq,int arr_sub,int num){if(sq->posN ){ //判断顺序列表是否为满printf("error");return;}else if(arr_sub<0||arr_sub>sq->pos){printf("error…

微信小程序【五】好玩的点击展开弹框功能

弹出效果 步骤一、index.js步骤二、index.json步骤三、index.wxml步骤四、index.wxss 效果简述&#xff1a;恶搞的好玩点击效果&#xff0c;点击后展开 步骤一、index.js Page({data: {isPlaying: true,animationClass: music-icon,show_menu: false, // 菜单是否激活show_p…

异构算力的调度策略解析与实现

随着云计算、大数据和人工智能技术的飞速发展&#xff0c;异构算力调度成为了一个日益重要的课题。异构算力调度是指针对不同类型的计算资源&#xff08;如CPU、GPU、FPGA等&#xff09;进行合理分配与调度&#xff0c;以提高计算资源的利用率、降低功耗并加速任务执行。本文将…

浮点数的二进制表示

浮点数的二进制表示 浮点数在C/C中对应 float 和 double 类型&#xff0c;我们有必要知道浮点数在计算机中实际存储方式。 IEEE754规定&#xff1a; 单精度浮点数字长32位&#xff0c;尾数长度23&#xff0c;指数长度8,指数偏移量127&#xff1b;双精度浮点数字长64位&#xf…

Yarn UI 时间问题,相差8小时

位置 $HADOOP_HOME/share/hadoop/yarn/hadoop-yarn-common-2.6.1.jar 查看 jar tf hadoop-yarn-common-2.6.1.jar |grep yarn.dt.plugins.js webapps/static/yarn.dt.plugins.js 解压 jar -xvf hadoop-yarn-common-2.6.1.jar webapps/static/yarn.dt.plugins.js inflated: we…

mybatis-plus中出现Field ‘id‘ doesn‘t have a default value问题解决方法

问题分析&#xff1a; 出现这个原因&#xff0c;主要是因为mybatis-plus自身查询的特性&#xff0c;因为查询都是它自己内部设定好的参数&#xff0c;一般为了简便&#xff0c;都会默认自己底层的数据库对应的主键id字段是自增的&#xff0c;也就是mybatis-plus认为不需要id,每…

【Git】.gitignore全局配置与忽略匹配规则详解

设置全局配置 1&#xff09;在C:/Users/用户名/目录下创建.gitignore文件&#xff0c;在里面添加忽略规则。 如何创建 .gitignore 文件&#xff1f; 新建一个.txt文件&#xff0c;重命名&#xff08;包括后缀.txt&#xff09;为 .gitignore 即可。 2&#xff09;将.gitignore设…

Eagle平替?免费超强的素材管理神器!支持多级标签,满足素材快速收集!

作为设计师&#xff0c;你是不是下载了很多类型的素材资源&#xff0c;然而要每次使用的时候&#xff0c;还要通过文件夹一级一级去翻找&#xff0c;非常麻烦&#xff01;还好我找到了一款好用的素材管家神器—千鹿设计助手&#xff0c;如果你之前有用过Eagle或者BillFish的话&…

华为od机试真题:求字符串所有整数最小和(Python)

2024华为OD机试&#xff08;C卷D卷&#xff09;最新题库【超值优惠】Java/Python/C合集 题目描述 1.输入字符串s输出s中包含所有整数的最小和&#xff0c;说明&#xff1a;1字符串s只包含a~z,A~Z,,-&#xff0c; 2.合法的整数包括正整数&#xff0c;一个或者多个0-9组成&…

归并排序 python C C++ 图解 代码 及解析

一&#xff0c;概念及其介绍 归并排序&#xff08;Merge sort&#xff09;是建立在归并操作上的一种有效、稳定的排序算法&#xff0c;该算法是采用分治法(Divide and Conquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff…

大厂linux面试题攻略三之Shell编程

一、Shell编程文本截取类 1.有一个b.txt文本(内容如下)&#xff0c;要求将所有域名截取出来&#xff0c;并统计重复域名出现的次数 http://www.baidu.com/index.html https://www.atguigu. com/index.html http://www.sina.com.cn/1024.html …

二百四十八、Linux——删除/etc/.sudoers文件进程或修改/etc/.sudoers文件内容

一、目的 安装国产化数据库OceanBase的时候&#xff0c;需要创建用户&#xff0c;并在/etc/.sudoers文件中赋予用户root权限 二、删除/etc/.sudoers文件进程 1 报错 W10: Warning: Changing a readonly file E325: ATTENTION Found a swap file by the name "/etc/.su…