java容器排序

news2025/2/13 4:05:13

Java的容器

在Java中,我们想要保存对象可以使用很多种手段。最简单的就是数组。但是数组具有固定的尺寸,而通常来说,程序总是在运行时根据条件来创建对象,我们无法预知将要创建对象的个数以及类型,所以Java推出了容器类来解决这一问题。

Java容器的基本概念

Java容器类库是用来保存对象的,他有两种不同的概念:

  1. Collection,独立元素的序列,这些元素都服从一条或多条规则。List、Set以及Queue都是Collection的一种,List必须按照顺序保存元素,而Set不能有重复元素,Queue需要按照排队规则来确定对象的顺序。
  2. Map,Map是键值对类型,允许用户通过键来查找对象。Hash表允许我们使用另一个对象来查找某个对象。

Collection和Map

在Java容器中一共定义了2种集合, 顶层接口分别是Collection和Map。但是这2个接口都不能直接被实现使用,分别代表两种不同类型的容器。

简单来看,Collection代表的是单个元素对象的序列,(可以有序/无序,可重复/不可重复 等,具体依据具体的子接口Set,List,Queue等);Map代表的是“键值对”对象的集合(同样可以有序/无序 等依据具体实现)

Collection接口

Collection是最基本的集合接口。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”。所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个 Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。

看一下Collection的部分源码

   /** 
     * @return collection包含元素的个数 
     */
int size();    
    /** 
     * @return 判断collection是否为空,为空返回true,不为空返回false 
     */  
boolean isEmpty();  
    /** 
     *如果指定的元素的类型与这个集合不兼容,则抛出类型转换异常 
     *@return 判断collection是否包含元素与o相等,假如 o != null,判断set中是否有元素与o相等,
     * 有返回true,没有返回false。假如o == null,抛出空指针异常
     */  
 	boolean contains(Object o);  
 /** 
     * 返回包含ollection所有元素的Iterator 
     */ 
    Iterator<E> iterator();  
     /** 
     * 返回collection所有包含元素的array 
     */  
    Object[] toArray();  
   /** 
     * 返回一个包含collection元素的指定类型的数组 
     */ 
    <T> T[] toArray(T[] a);  
     /** 
     * 插入元素,假如当前collection中存在元素与e相等,那么保持原collection不改变,返回false, 
     * 否则插入元素,并返回true 
     */  
    boolean add(E e);  
      /** 
     * remove类似于这样的元素(o == null? e == null : o.equals(e)),并返回true 
     */  
    boolean remove(Object o);  
    boolean containsAll(Collection<?> c);  
    boolean addAll(Collection<? extends E> c);  
    boolean retainAll(Collection<?> c);  
    boolean removeAll(Collection<?> c);  
    void clear();  
    boolean equals(Object o);  
    int hashCode();  
}

复制

Map接口

Map也是一个接口,一个map不能包含重复的key,每个key只能映射唯一一个value。Map接口是用来取代Dictionary抽象类的。Map接口提供三个集合视图,1.key的集合 2.value的集合 3.key-value的集合。map内元素的顺序取决于Iterator的具体实现,获取集合视图其实是获取一个迭代器,实现对遍历元素细节的隐藏。

同样,map的实现类应该提供两个“标准”构造器,一个无参构造器用来创建一个空map,一个只有一个参数,参数类型是map的构造器,用来创建一个新的和传入参数有一样key-value映射的map。实际上,后者允许复制任何一个map,这仅仅是一个建议,并没有强制要求,因为接口是无法包含构造器的,不过这个建议在JDK被遵守。

如果一个方法的操作是不被支持的,这个方法指定抛出UnsupportedOperationException异常。如果这个操作对map是没有影响的,那么也可以不抛出UnsupportedOperationException异常。例如,在一个不能被修改的map调用putAll(Map)方法,如果该map的映射是空的,就不要求抛出UnsupportedOperationException异常。

看一下部分源码:

/**
*返回map中key-value映射的数量
*/
int size();
/**
*如果map中没有key-value映射返回true
*/
boolean isEmpty();

/**
*如果map不含key映射,返回false,当key的类型不符合,抛出ClassCastException,当key是
*null且该map不支持key的值是null时,抛出NullPointerException
*/
boolean containsKey(Object key);

/**
*如果map含有一个以上的key映射的参数value,返回true,异常抛出的情况和containKey一样
*/
boolean containsValue(Object value);

/**
*根据key得到对应的value,如果没有对应的映射,返回null,如果map允许value为null,返回
*null可能是有一对key-null的映射或没有对应的映射
*/
V get(Object key);

/**
*往map放入一对key-value映射
*/
V put(K key, V value);

/**
*根据key删除对应映射
*/
V remove(Object key);

/**
*复制一份与参数一样的map
*/
void putAll(Map<? extends K, ? extends V> m);

/**
*清空map中所有的映射
*/
void clear();

/**
*返回map中所有key的集合
*/
Set<K> keySet();

/**
*返回map中所有value的集合
*/
Collection<V> values();

/**
*返回key-value的集合
*/
Set<Map.Entry<K, V>> entrySet();

/**
*比较调用者与参数是否相等
*/
boolean equals(Object o);

/**
*计算map的hash code
*/
int hashCode();
}

复制

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

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

相关文章

动态规划-最长的回文序列

这里写自定义目录标题 1 描述2 样例2.1 样例12.2 样例2 3 解题思路以及实现方法3.1 解题思路3.1.1 确定状态3.1.2 转移方程3.1.3 初始条件和边界情况3.1.4 计算顺序 3.2 题解3.2.1 C实现3.2.2 java实现 该题是lintcode上 667 最长的回文序列&#xff0c;该题的解题思路亦是参…

方法选对,事半功倍:数据分析方法

人们发明了数据可视化&#xff0c;利用人类大脑更善于处理图像信息的特点&#xff0c;透过图形化的手段&#xff0c;用图表清晰有效地传达和沟通信息。把以往庞杂、繁乱的数据报表转化成简洁明了的可视化图表。 通过数据可视化制作出的图表&#xff0c;不再像传统分析方案那样…

JavaScript Web APIs学习总结

以后声明变量我们有限使用哪一个&#xff1f; const 有了变量先给const&#xff0c;如果发现它后面是要被修改的&#xff0c;再改为let 为什么const声明的对象可以修改里面的属性&#xff1f; 因为对象是引用类型&#xff0c;里面存储的是地址&#xff0c;只要地址不变&…

月入6000+的CSGO游戏搬砖项目操作细节和要求

月入6000的CSGO游戏搬砖项目操作细节和要求 最近咨询CSGO搬砖项目的人较多&#xff0c;在此整理一份统一的项目操作细节和要求。 1、什么是国外Steam游戏装备汇率差项目&#xff1f; 这个项目的基本原理是&#xff1a;购买国外Steam游戏平台上的装备&#xff0c;再在国内网易…

SSR渲染--02--nuxt demo(vue)

cmd 打开命令提示符&#xff0c;创建nuxt npm i create-nuxt-app -g create-nuxt-app vue-honor-of-kings&#xff08;这个是我的项目名&#xff0c;输入自己的项目名&#xff09; npm run dev创建的具体配置 【写demo为了方便&#xff0c;我直接下载了Element的包&#xff0…

游戏画面延迟的原因及解决方法

游戏画面延迟&#xff0c;是玩家在游戏中操作后&#xff0c;画面反应出现滞后或卡顿的现象。这会严重影响玩家的游戏体验和竞技水平&#xff0c;尤其是在一些需要高速反应和精确操作的3A大作中&#xff0c;画面延迟可能导致玩家错失良机或者被敌人击败。 那么&#xff0c;游戏…

电能质量监测装置在某半导体公司的应用

摘 要&#xff1a;半导体生产制造业在国民经济中起着举足轻重的作用&#xff0c;相关企业的规模也越来越大。其供配电系统稳定、可靠的运维不仅是其安全生产的基本保证&#xff0c;还关系到产品质量和生产的顺利进行。而半导体行业中大部分工艺设备对电能质量比较敏感&#xff…

《CDP企业数据云平台从入门到实践》——如何迁移CDH/HDP到CDP(2)

原文&#xff1a;《CDP企业数据云平台从入门到实践》——如何迁移CDH/HDP到CDP&#xff08;2&#xff09;-阿里云开发者社区 简介&#xff1a; 《CDP企业数据云平台从入门到实践》——如何迁移CDH/HDP到CDP&#xff08;2&#xff09; 《CDP企业数据云平台从入门到实践》——如…

Windows安装和配置VCenter

Vcenter的环境搭建和配置 Vcenter简介 Vcenter一般指 VMware vCenter™ Server&#xff0c;VMware vCenterServer 提供了一个可伸缩、可扩展的平台&#xff0c;为 虚拟化管理奠定了基础。 VMware vCenter Server&#xff08;以前称为 VMware VirtualCenter&#xff09;&#…

Qt6.5.1+WebRTC学习笔记(十一)开发环境搭建(ubuntu22.04)

前言 win10开发测试已经一段时间了&#xff0c;最近将程序移植到ubuntu测试了下&#xff0c;改动不是很大&#xff0c;本教程记录下环境搭建过程 一、准备 1.操作系统ubuntu22.04 64位 x86架构&#xff08;建议更新到最新&#xff09; 2.合理的上网方式&#xff0c;需要正常…

模板匹配笔记

模板匹配是一种最基本、最原始的模式识别的方法。通过对比某一特定物体的图案位于图像的什么地方&#xff0c;进而识别出物体。它是图像处理中最基本、最常用的匹配方法。它的局限性主要是它只能进行平行移动&#xff0c;若原图像中的匹配目标发生旋转或大小变化&#xff0c;该…

运维(SRE)成长之路-第2天 文本编辑工具之神VIM

vi和vim简介 在Linux中我们经常编辑修改文本文件&#xff0c;即由ASCII, Unicode 或其它编码的纯文字的文件。之前介绍过nano&#xff0c;实际工作中我们会使用更为专业&#xff0c;功能强大的工具 文本编辑种类&#xff1a; 全屏编辑器&#xff1a;nano&#xff08;字符工具…

Spark SQL数据源:Parquet文件

文章目录 一、Parquet简介二、读取和写入Parquet的方法&#xff08;一&#xff09;利用parquet()方法读取parquet文件1、数据准备2、读取parquet文件3、显示数据帧内容 &#xff08;二&#xff09;利用parquet()方法写入parquet文件1、写入parquet文件2、查看生成的parquet文件…

Spring Security--多个过滤器链和多个用户表

请求从客户端出发&#xff0c;到达客户端&#xff0c;也就是servlet&#xff0c;中间有很多过滤器的&#xff0c;其中就有一个过滤器链代理&#xff0c;里面包含了过滤器的一个集合。而且Spring Security Filter并不是直接嵌入到Web Filter中的&#xff0c;而是通过FilterChain…

海纳“千川”:得物多场景统一推荐平台|精选

1 千川由来 得物的推荐场景&#xff0c;除了首页瀑布流等几个比较大的场景之外&#xff0c;还有很多长尾的小场景&#xff0c;包括&#xff1a;频道、会场、购中购后场景、品牌墙等。这类场景存在单个场景体量小&#xff08;UV和GMV均偏小&#xff09;、场景零散、类型多元的情…

炫龙笔记本怎么用U盘重装Win10系统?

炫龙笔记本怎么用U盘重装Win10系统&#xff1f;很多使用炫龙笔记本电脑的用户在问&#xff0c;怎么使用U盘来重装一下电脑的Win10系统&#xff0c;这时候用户先要准备一个U盘&#xff0c;还有一个能够正常联网的炫龙笔记本电脑&#xff0c;最后按照以下炫龙笔记本用U盘重装Win1…

可算是熬出头了,测试3年,费时6个月,入职阿里,涨薪14K

本科毕业后就一直从事测试的工作&#xff0c;和多数人一样&#xff0c;最开始从事点点点的工作&#xff0c;看着自己的同学一步一步往上走&#xff0c;自己还是在原地踏步&#xff0c;说实话这不是自己想要的状态。 一年半后开始沪漂生活&#xff0c;又摸爬滚打了一年半&#…

FL Studio21.0.3最新版本下载 可切换中文语言

FL Studio是最好的! 在我12/13岁的时候&#xff0c;一个DJ向我介绍了FL Studio。它让我大吃一惊&#xff0c;怎么能在几秒钟内做出一个鼓的模式。后来我又玩了好几年&#xff0c;到了15岁时&#xff0c;我确定我想成为一名制作人。FL Studio帮助我把脑海中的想法快速地变成一个…

开发者必备:动态贴纸和美颜SDK的集成教程

动态贴纸和美颜技术不仅能带来多样的拍摄方案&#xff0c;还可以增加应用的吸引力。本篇文章将为开发者提供动态贴纸和美颜SDK的集成教程、技术方案&#xff0c;帮助开发者快速实现这些功能。 一、动态贴纸美颜SDK集成教程 导入SDK 在Android Studio中&#xff0c;开发者需要…

柴油发电机供电技巧,太有用了!

随着现代工业和商业的发展&#xff0c;对可靠的电力供应的需求变得越来越重要。在许多场景中&#xff0c;柴油发电机作为备用电源成为了关键设备&#xff0c;用于应对停电或电力故障时的紧急情况。 然而&#xff0c;对于企业和组织来说&#xff0c;有效监控和管理柴油发电机的运…