Java核心——集合(一)接口

2023-11-06

集合框架围绕一组标准接口而设计,我们可以直接使用这些接口的标准实现,例如:LinkedList,HashSet,TreeSet等,除此之外还可以通过这些接口实现自己的集合。

集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容:

  • 接口:是代表集合的抽象数据类型。例如:Collection、List、Set、Map等。之所以定义多个接口,是为了以不同的方式操作集合对象。
  • 实现(类):是集合接口的具体实现。从本质上讲,他们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。
  • 算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。

Java集合框架提供了一套使用方便的接口和类,位于java.util包中,所以当使用集合框架的时候需要进行导包。 

集合框架定义了一些接口,描述如下:

  1. Collection接口:最基本的集合接口,一个Collection代表一组Object,即Collection的元素。Java不提供直接继承自Collection的类,只提供继承于的子接口(List、Set等)。Collection接口存储一组不唯一,无序的对象。
  2. List接口:是一个有序的Collection,使用此接口能够精确的控制每个元素插入的位置,能够通过索引来访问List中的元素,第一个元素的索引为0,而且允许有相同的元素。List接口存储一组不唯一,有序(顺序插入)的对象。
  3. Set接口:Set具有与Collection完全一样的接口,只是行为上不同,Set不保存重复的元素。Set接口存储一组唯一、无序的对象。
  4. SortedSet接口:继承于Set保存有序的集合。
  5. Map接口:存储一组键值对象,提供key(键)到value(值)的映射。
  6. Map.Entry接口:描述在一个Map中的一个元素(键/值对)。是一个Map的内部接口。
  7. SortedMap接口:继承于Map,使Key保持在升序排列。
  8. Enumeration接口:这是一个传统的接口和定义方法,通过它可以枚举(一次获得一个)对象集合中的元素。这个传统接口已被迭代器(Iterator、LinkIterator)取代

Set和List的区别:

  • Set接口实例存储的是无序的,不重复的数据。List接口实例存储的是有序的,可以重复的元素。
  • Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
  • List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变。 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java核心——集合(一)接口 的相关文章

  • @TableGenerator 的初始值属性在 Hibernate 中显示问题,但在 JPA 中则不然

    package com sb firstjpaexample pojo import javax persistence Column import javax persistence Entity import javax persist
  • java.lang.VerifyError:JVMVRFY012堆栈形状不一致;

    在 WAS 8 5 5 中部署 Maven 项目时出现以下错误 我在WAS中安装了JDK 1 6和1 7 错误500 org springframework web util NestedServletException 处理程序处理失败
  • 将 MouseListener 添加到面板

    我正在尝试将鼠标操作添加到我的面板中 这就是程序应该做的事情 编写一个程序 允许用户通过按三下鼠标来指定一个三角形 第一次按下鼠标后 画一个小点 第二次按下鼠标后 绘制一条连接前两个点的线 第三次按下鼠标后 绘制整个三角形 第四次按下鼠标会
  • 在 Java 正则表达式中获取多个模式的重叠匹配

    我有同样的问题这个链接 https stackoverflow com questions 18751486 matching one string multiple times using regex in java 但有多种模式 我的正
  • 在 Java 中使用 Batik 检查和删除 SVG 中的属性

    这个问题基本上说明了一切 如何检查 SVG 是否具有 viewBox 属性 我正在使用蜡染库 我需要这个 因为我需要 至少 通知用户有一个 viewBox 属性 我可以删除它吗 使用 org w3c dom 类 您可以按照以下方式做一些事情
  • 使类只能从特定类实例化

    假设我有 3 节课class1 class2 and class3 我怎样才能拥有它class1只能通过实例化class2 class1 object new class1 但不是 class3 或任何其他类 我认为它应该与修饰符一起使用
  • 如何在url请求中发送数组

    我的要求如下 我想给出演员姓名 开始日期 结束日期并获取他在该时期出演的所有电影 因此 我的服务请求是这样的 http localhost 8080 MovieDB GetJson name Actor startDate 20120101
  • 最快的高斯模糊实现

    如何以最快的速度实施高斯模糊 http en wikipedia org wiki Gaussian blur算法 我要用Java来实现它 所以GPU http en wikipedia org wiki Graphics processi
  • JUnit5 平台启动器 API - 如果没有至少一个测试引擎,则无法创建启动器

    我正在尝试升级我们的自动化测试套件的测试能力以接受 JUnit5 测试并遵循JUnit 平台启动器 API 说明 https junit org junit5 docs current user guide launcher api我收到错
  • 无法从资源加载图片

    So I am trying to load a image file from a resource so that when I export my application into a jar file it could be use
  • 可访问数据的 Java 约定。 (公共访问器和 Getter/命名)

    通过 Java API 您会看到大量冲突的命名和实践 这让我感到非常困惑 例如 The String http grepcode com file repository grepcode com java root jdk openjdk
  • 确定序列化对象的类型

    我需要通过套接字发送消息 从用户到引擎的请求 以及从引擎到用户的响应 所以流程本质上是 serialized request Server lt network gt Client serialized response request r
  • Struts 1 到 Spring 迁移 - 策略

    我有一个legacy银行应用程序编码为Struts 1 JSP现在的要求是迁移后端 目前为 MVC to Springboot MVC 后续UI JSP 将迁移到angular Caveats 1 后端不是无状态的 2 会话对象中存储了大量
  • JUNIT 测试 void 方法

    我有一个充满 void 方法的 java 类 我想进行一些单元测试以获得最大的代码覆盖率 例如我有这个方法 protected static void checkifValidElements int arg1 int arg2 metho
  • Java 中 JButton 的击键/热键

    最初我使用 JMenu 并建立热键以使用加速器工作 它运行得很好 现在我想在 JButton 中实现相同的行为 但我陷入困境 这是我编写的代码 请分享您的想法 以便我可以走上正确的道路 import javax swing import j
  • 使用单独的线程在java中读取和写入文件

    我创建了两个线程并修改了 run 函数 以便一个线程读取一行 另一个线程将同一行写入新文件 这种情况会发生直到整个文件被复制为止 我遇到的问题是 即使我使用变量来控制线程一一执行 但线程的执行仍然不均匀 即一个线程执行多次 然后控制权转移
  • 删除 JFX 中选项卡后面的灰色背景

    So is there any way to remove the gray area behind the tab s 我尝试过用 CSS 来做到这一点 但没有找到方法 要设置 tabpane 标题的背景颜色 请在 CSS 文件中写入 t
  • java.lang.IllegalStateException - 提交响应后无法创建会话

    我在我的项目中使用 JSF PrimeFaces 我为此准备了一个Maven项目 当我编译项目并加载主页后 我收到以下异常 java lang IllegalStateException Cannot create a session af
  • 受信任的 1.5 小程序可以执行系统命令吗?

    如果是的话 这个能力有什么限制吗 具体来说 我需要以 Mac OSX 为目标 我以前用过这个在 Windows 系统上启动东西 但从未在 Mac 上尝试过 public void launchScript String args Strin
  • java中void的作用是什么?

    返回类型 方法返回值的数据类型 如果方法不返回值 则返回 void http download oracle com javase tutorial java javaOO methods html http download oracle

随机推荐

  • Linux命令_awk & 字符串过滤

    前言 被称为 Linux 文本操作三剑客之一的 awk 不但可以处理复杂文件输出 更是一门编程语言 支持对文本每行每列精确读出 格式化输出 正则匹配 if 判断 数组 循环 目录 1 语法 1 1 选项参数 1 2 内置变量 1 3 运算符
  • Integer.parseInt(s)与Integer.valueOf(s)的区别详解

    一 Integer parseInt s 用法 String s1 1000 String s2 1000 int n1 Integer parseInt s1 int n2 Integer parseInt s2 if n1 n2 Sys
  • Pycharm一复制就出现光标变成黑块,无法编辑

    光标变黑块是因为输入方式变成了改写方式 INSERT可以切换插入 改写模式 大多笔记本上是INS键 在键盘上 外接键盘一般是Insert键 但有时光按insert也不行 试试下面这个方法 file gt settings gt Plugin
  • 博客记录

    文章目录 一 3d点云 1 激光SLAM 1 从零开始做自动驾驶定位 2 点云匹配定位 1 NDT 二 编程 1 CMakeLists 三 Github 1 自动驾驶相关 四 Markdown 1 emoji 用来记录一下自己在学习的过程中
  • linux下文件的访问时间、修改时间和改变时间

    参考 linux下文件的创建时间 访问时间 修改时间和改变时间 刀刀的专栏 博客频道 CSDN NET http blog csdn net zyz511919766 article details 14452027 归纳一下 linux下
  • MyBatis动态拼接SQL

    通过使用MyBatis提供的标签方法可以实现动态SQL拼接 1 if标签
  • oracle时间获取记录

    select trunc sysdate from dual 2017 9 11 select trunc sysdate 1 from dual 2017 9 12 select sysdate from dual 从系统获取时间2017
  • VsCode怎么打开settings.json文件?

    Mac command shift p 输入setting json 选择 首选项 打开设置 json 即可
  • 使用Git进行版本控制,并将代码托管到GitHub的完整流程

    Git是一个分布式版本控制系统 它可以记录文件的修改历史 并且可以管理多人协作开发的项目 Git的基本工作流程如下 在开发者的本地电脑上安装Git 并克隆一个GitHub上已存在的项目到本地 在本地进行代码的修改和提交 这些修改都会被存储在
  • Android studio编译中Connect to maven.google.com:443[xxx] failed: connect timed out的解决方法

    前言 最近徒弟分到了一个rn的模块开发工作 但rn 大家懂的 Android studio有时需要科学上网下载必要的rn库 又是一个徒弟哀嚎的日子 问题 连接maven google com超时 具体编译报错如下 gt Could not
  • R语言-- R语言数据类型(3)

    列表 创建 1 1 创建一个列表L1 记录三位同学的姓名 A B C 编号 1 2 3 数学成绩 80 90 95 语文成绩 75 95 80 L1 lt list 姓名 c A B C 编号 c 1 2 3 数学 c 80 90 95 语
  • VPP代码阅读中文注解---dlmalloc.h

    Quickstart This library is all in one file to simplify the most common usage ftp it compile it O3 and link it into anoth
  • 大数据课程L3——网站流量项目的系统搭建

    文章作者邮箱 yugongshiye sina cn 地址 广东惠州 本章节目的 了解网站流量项目的运行环境 了解网站流量项目的日志采集系统搭建 了解网站流量项目的离线业务系统搭建 了解网站流量项目的Hive做离线数据处理 了解网站流量项目
  • js解leetcode(44)-简单

    1 有多少小于当前数字的数字 题目 给你一个数组 nums 对于其中每个元素 nums i 请你统计数组中比它小的所有数字的数目 换而言之 对于每个 nums i 你必须计算出有效的 j 的数量 其中 j 满足 j i 且 nums j l
  • Linux 下bsub命令

    一 bsub bsub 提交给lsf作业的命令 命令格式 bsub options command argument bsub pack job submission file q 选择队列 i 指定输入文件 I 交互模式 此时终端不能输入
  • RabbitMQ和Kafka的区别

    RabbitMQ 和 Apache Kafka 是两种流行的消息传递系统 它们具有不同的设计目标和适用场景 以下是它们的主要区别 消息传递模型 RabbitMQ RabbitMQ 是一个传统的消息队列系统 采用了基于消息队列的发布 订阅模型
  • 关于压缩感知的基本原理

    转自https blog csdn net wanz2 article details 52770095 该博客中作者介绍了传统的压缩和压缩感知 并且介绍了匹配追踪算法OMP的基本原理 让我看明白点了OMP算法 但是有一个疑问 如果不知道信
  • Unity下载大文件断点续传

    最近要使用安卓更新下载apk更新功能 由于安卓机运行内存有限 下载大文件就得采用实时下载写入 实时释放内存的方法 考虑到网络环境不稳定时下载被迫中断的情况 重新从头下载会导致不必要的资源浪费 断点续传也很有必要 UnityWebReques
  • 计算机网络第七版--概述知识点总结

    计算机网络第七版 谢希仁 第一章 概述 1 1 计算机网络在信息时代的应用 21世纪的一些重要的特征就是数字化 网络化和信息化 它是一个以网络为核心的信息时代 互联网具有两个重要的特点 连通性 交换各种信息 和共享 资源共享 1 2 互联网
  • Java核心——集合(一)接口

    集合框架围绕一组标准接口而设计 我们可以直接使用这些接口的标准实现 例如 LinkedList HashSet TreeSet等 除此之外还可以通过这些接口实现自己的集合 集合框架是一个用来代表和操纵集合的统一架构 所有的集合框架都包含如下