什么是容器

news2024/11/19 3:25:28

什么是容器

  • 一:概念
  • 二:容器API类图
    • 2.1 Collection
    • 2.2 Set
    • 2.3 List
    • 2.4 Map
  • 三:详细解释
    • 3.1 Collection接口
      • 3.1.1 Collection用法
    • 3.2 Iterator接口
    • 3.3 List接口
    • 3.4 Comparable接口
  • 四:如何选择数据结构
    • 4.1 衡量标准:读的效率和改的效率
    • 4.2 Map接口
    • 4.3 JDK1.5泛型
    • 4.3.1 起因:
    • 4.3.2 解决方法:
    • 4.3.3 好处:
  • 五:总结&提升

一:概念

在Java中,容器是一种数据结构,用于存储和组织其他对象。容器提供了一种方式来管理和访问这些对象,并提供了各种方法来增加、删除、搜索和遍历其中的元素。Java提供了多种容器类,每种容器类都有其特定的用途和功能。

二:容器API类图

在这里插入图片描述

2.1 Collection

Collection代表了一个容器Collection集合

在Java中,java.util.Collection接口是表示一组对象的根接口。它是Java集合框架的基础,提供了统一的操作和方法,用于处理和管理对象的集合。

2.2 Set

Set(集合):存储唯一元素的集合。它不允许存储重复的元素,并提供了高效的查找和删除操作。常见的Set实现类包括HashSet、TreeSet和LinkedHashSet。

2.3 List

以有序的方式存储对象的集合。它允许存储重复的元素,并提供了按索引访问、插入、删除和搜索元素的方法。常见的List实现类包括ArrayList、LinkedList和Vector。

2.4 Map

Map(映射):以键值对(Key-Value)的形式存储元素的集合。它提供了通过键快速查找和访问值的功能。常见的Map实现类包括HashMap、TreeMap和LinkedHashMap。

Collection接口——定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式

Set中的数据对象没有顺序且不可以重复
List中的数据对象有顺序且可以重复
Map接口定义了存储“键(key)——值(value)映射对”的方法

三:详细解释

3.1 Collection接口

3.1.1 Collection用法

import java.util.*;
public class Name{
	private String firstName,lastName;
    public Name(String firstName,String lastName){
    	this.firstName= firsName;
        this.lastName= lastName;
    }
    public String getFirsName(){ return firstName;}
    public String getLastName(){ return lastName;}
    public String toString(){ return firstName + " " + lastName;}
}

public class Teat {
	public static void main(string[] args){
    	Collection c =new ArrayList();
        //可以放入不同类型的对象
        c.add("hello");
        c.add(new Name("f1","11"));
        c.add(new Integer(100));
        System.out.println(c.size());
        System.out.println(c);
    }
}

输出结果 : 3 [hello,f1 11,100]
容器类对象在调用remove、contains等方法时需要比较对象是否相等,这会涉及到对象类型的equals方法和hashCode方法;对于自定义的类型,需要要重写equals和hashCode方法以实现自定义的对象相等规则
注意:相等的对象应该具有相等的hash codes
增加Name类的equals和hashCode方法如下:

public boolean equals(Object obj){
	if(obj instanceof Name){
    	Name name =(Name) obj;
        return (firstName.equals(name.firstName))
            &&(lastName.equals(name.lastName));
    }
    return super.equals(obj);
}

public int hashCode(){
	return firstName.hashCode();
}

重写equals方法时必须重写hashCode方法

3.2 Iterator接口

  1. 所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象
  2. Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作
  3. Iterator接口定义了如下方法
boolean hasNext (); //判断游标右边是否有元素
Object next(); //返回游标右边的元素并将游标移动到下一个位置
void remove(); // 删除游标左面的元素,在执行完next之后该操作只能执行一次

3.3 List接口

List接口是Collection的子接口,实现List接口的容器类中的元素是有顺序的,而且可以重复
List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可根据序号存取容器中的元素
常用算法:
在这里插入图片描述

3.4 Comparable接口

问:上面的算法根据什么确定容器中对象的“大小”顺序?

  • 所有可以“排序”的类都实现了java.lang.Comparable接口,Comparable接口中只有一个方法:public int compareTo(Object obj),

  • 该方法:
    返回 0 表示this==obj
    返回正数表示this>obj
    返回负数表示this<obj
    实现了Comparable接口的类通过实现comparaTo方法从而确定该类对象的排序方式

四:如何选择数据结构

4.1 衡量标准:读的效率和改的效率

  1. Array读快改慢
  2. Linked改快读慢
  3. Hash两者之间

4.2 Map接口

实现Map接口的类用来存储 键—值 对
实现类有HashMap和TreeMap
存储的 键—值 对通过键来标识,所以键值不能重复

4.3 JDK1.5泛型

4.3.1 起因:

  • JDK1.4以前类型不明确
  • 装入集合的类型都被当作Object对待,从而失去自己的实际类型
  • 从集合中取出时往往需要转型,效率低,容易产生错误

4.3.2 解决方法:

  • 在定义集合时同时定义集合中对象的类型

4.3.3 好处:

  • 增强程序的可读性和稳定性

五:总结&提升

  • 本文总结了Java中的容器概念和相关的API类图。容器是一种数据结构,用于存储和组织其他对象,并提供了各种操作方法。Java提供了多种容器类,包括Collection、Set、List和Map等。
  • 在容器API类图中,Collection代表一个容器集合,是Java集合框架的基础接口。Set是存储唯一元素的集合,不允许重复,并提供了高效的查找和删除操作。常见的Set实现类有HashSet、TreeSet和LinkedHashSet。List以有序方式存储对象的集合,允许重复元素,并提供了按索引访问、插入、删除和搜索元素的方法。常见的List实现类有ArrayList、LinkedList和Vector。Map以键值对的形式存储元素的集合,提供了通过键快速查找和访问值的功能。常见的Map实现类有HashMap、TreeMap和LinkedHashMap。
    在详细解释部分,介绍了Collection接口的方法,并给出了一个使用ArrayList的示例。还提到了容器类对象在调用remove、contains等方法时需要比较对象是否相等,需要重写equals和hashCode方法以实现自定义的对象相等规则。
  • 文章还介绍了Iterator接口,所有实现了Collection接口的容器类都有一个iterator方法返回一个实现了Iterator接口的对象,用于方便地遍历容器内的元素。
    List接口是Collection的子接口,实现List接口的容器类中的元素有顺序且可以重复,可以通过索引存取元素。
  • 文章提到了Comparable接口,它是实现排序的类所要实现的接口,通过实现compareTo方法来确定容器中对象的大小顺序。
    在如何选择数据结构部分,提到了衡量标准是读的效率和改的效率。Array的读取快但改变慢,LinkedList的改变快但读取慢,HashMap的性能在两者之间。
  • 最后,文章提到了JDK1.5引入的泛型,解决了在旧版本中集合中的元素被当作Object处理的问题,增强了程序的可读性和稳定性。

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

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

相关文章

CRM系统本地部署和云部署的优缺点

众所周知&#xff0c;CRM系统部署方式有两种&#xff0c;分别是本地部署和云部署。两者各有优缺点&#xff0c;企业可以按照自身的需求来进行选择。下面说说CRM不同部署方式的优缺点。 CRM本地部署 本地部署是指将CRM系统安装在企业自己的服务器上&#xff0c;并由企业自行维…

网工届封神的五条命令

文章目录 前言一、PING:测试与目标主机的连通性二、IPCONFIG:显示网络适配器的IP地址三、tracert:测试到达目标主机的路径四、arp -a:查询本机高速缓存项目五、route print&#xff1a;查看计算机路由表中的项目 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#…

【密码产品篇】VPN产品密钥体系结构

【密码产品篇】VPN产品密钥体系结构 VPN产品只有"设备密钥"是"非对称密钥"—【蘇小沐】 IPSec VPN密钥体系 IPSec VPN密钥体系&#xff1a;设备密钥、工作密钥、会话密钥。 IPsec VPN作用设备密钥非对称密钥对&#xff0c;包括签名密钥对和加密密钥对&a…

axios 的 qs库

1.axios官网中提到的qs库 axios官网 2. content-type和 参数 的关系 content-type : application/json&#xff0c;要求的参数格式是JSON {a:c,b:d }content-type :application / x-www-form-urlencoded 要求的参数格式是键值对拼接的方式 :keyvalue&keyvalue ac&bd…

Powerflex ready node

1 网络交换机 需要配置 2 网卡配置 3 磁盘残留信息清楚 4 磁盘顺序如何设置固定 特别是sda这块 #rpm -qa | grep EMC --查看当前安装的EMC Powerflex组件信息 安装客户端注意 需要使用如下 rpm --import RPM-GPG-KEY-ScaleIO #MDM_IP10.10.10.xx,10.10.20.xx rpm -i EMC-…

webpack将vue3单页面应用改造成多页面应用

上篇文章搞了个单页面vue&#xff0c;现在要将其改成多页面&#xff0c;只是简单尝试&#xff0c;给了例子 其实也就是改个webpack的入口和html模版的配置&#xff0c;其他的话&#xff0c;每个页面都有自己的vue和路由实例&#xff0c;pinia的话就共享吧 &#xff01;import…

界面控件DevExpress Blazor UI v22.2 - 报表、富文本编辑器组件增强

DevExpress拥有.NET开发需要的所有平台控件&#xff0c;包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具&#xff0c;该组件拥有众多新产品和数十个具有高影响力的功能&#xff0c;可为桌面、Web和移动应…

Linux做爬虫被封IP怎么办

如果您的 Linux 爬虫被目标网站封禁了 IP 地址&#xff0c;可以考虑以下几种解决方案&#xff1a; 1、切换 IP 地址 您可以使用代理服务器或 PPTP 等工具来改变您的 IP 地址。这些工具可以模拟不同的网络位置并使您的爬虫变得更加隐蔽。例如在 Python 中&#xff0c;可以通过…

Maven基础学习---2、Maven安装与配置

1、Maven核心程序解压与配置文件 1、Maven官网地址 首页&#xff1a; Maven – Welcome to Apache Maven(opens new window) 下载页面&#xff1a; Maven – Download Apache Maven(opens new window) 下载链接&#xff1a; 具体下载地址&#xff1a;https://dlcdn.apache.…

爱奇艺新财报:转机频频

配图来自Canva可画 今年开年&#xff0c;一部《狂飙》拉开了剧集大幕。据灯塔专业版数据显示&#xff0c;《狂飙》的全网正片播放市占率最高超过30%&#xff0c;春节期间稳定在25%以上。《狂飙》的爆火在观众群体中掀起了一波追剧狂潮&#xff0c;除了一路“狂飙”的收视率外&…

mysql,oracle使用区别

1.1concat&#xff0c;concat_ws&#xff0c;group_concat 配置方式 临时&#xff1a;SET SESSION group_concat_max_len 10240; 永久&#xff1a;配置文件my.ini增加group_concat_max_len10240 查看配置&#xff1a;show variables like group_concat_max_len; 2.1oracle-sta…

【C++】22.单例模式+类型转换

1.单例模式 1定义 之前已经学过一些设计模式 迭代器模式 -- 基于面向对象三大特性之一的 封装设计出来的 用一个迭代器类封装以后 不暴露容器结构的情况下 统一的方式访问修改容器中的数据 适配器模式 -- 体现的是一种复用 还有一些常见的设计模式如:工厂模式 装饰器模式…

定义制造业操作(定义 MES/MOM 系统)

制造业操作包含众多工厂级活动&#xff0c;涉及设备&#xff08;定义、使用、时间表和维护&#xff09;、材料&#xff08;识别、属性、位置和状态&#xff09;、人员&#xff08;资格、可用性和时间表&#xff09;&#xff0c;以及这些资源与包含其信息碎片的众多系统之间的互…

BFT 最前线 | 腾讯发布Q1季报;超2000伙伴测试阿里云通义千问;黄仁勋:芯片是NVIDIA加速与AI计算的的“理想应用”

原创 | 文 BFT机器人 AI视界 TECHNOLOGY NEWS 01 阿里云&#xff1a;超2000伙伴测试通义千问 行业专属大模型将成趋势 2023阿里云常州峰会上&#xff0c;阿里云智能中国区总裁黄海清透露&#xff1a;目前通义千问大模型已有超2000个合作伙伴进行测试。未来大模型面向各行各…

微信视频怎么录屏?2个方法教您轻松录制!

案例&#xff1a;怎么录制微信视频通话&#xff1f; 【我在和家人或者朋友打微信视频电话时&#xff0c;总是会发生一些有趣的事情&#xff0c;我想把这些美好的画面通过录屏记录下来。但我不知道如何录制微信视频通话&#xff1f;有没有大佬支个招&#xff01;】 微信视频通…

macOS Big Sur 11.7.7 (20G1345) 正式版 ISO、PKG、DMG、IPSW 下载

本站下载的 macOS 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安装。另外也支持在 Windows 和 Linux 中创建可引导介质。 2023 年 5 月 18 日&#xff08;北京…

Boost开发指南-1.2progress_timer

progress_timer progress_timer也是一个计时器&#xff0c;它继承自timer&#xff0c;会在析构时自动输出时间&#xff0c;省去了timer手动调用elapsed()的工作&#xff0c;是一个用于自动计时相当方便的小工具。 progress_timer位于名字空间boost&#xff0c;为了使用progre…

浅谈PMO对组织战略的支持︱美团骑行事业部项目管理中心负责人边国华

美团骑行事业部项目管理中心负责人边国华先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;浅谈PMO对组织战略的支持。大会将于6月17-18日在北京举办&#xff0c;更多内容请浏览会议日程 议题内容简要&#xff1a; 战略是组织运行的…

Mysql【基础篇】—— mysql基础知识

Mysql【基础篇】—— mysql基础知识 ~&#x1f60e; 前言&#x1f64c;关系型数据库SQl 总结撒花&#x1f49e; &#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右铭&#xff1a;全神贯注的上吧&#xff01;&#xff01;&#xff01; &#x1f60a;作者简介…

CPU、内存使用率告警问题处理

可能原因 CPU 或内存使用率过高&#xff0c;容易引起服务响应速度变慢、服务器登录不上等问题。而引起 CPU 或内存使用率过高可能由硬件、系统进程、业务进程或者木马病毒等因素所致。 排查思路 定位消耗 CPU 或内存的具体进程。对 CPU 或内存占用率高的进程进行分析。 如果是…