单列集合和双列集合

news2024/11/14 3:07:27

        Java中的集合(Collection)是一个框架,用于存储、操作数据。集合框架包括了许多接口和类,用于表示数据的存储方式。集合主要分为两大类:CollectionMap,其中 Collection 又可以分为 ListSetQueue 三种常见类型。


1. List :有序集合,允许重复元素

   List 接口表示一个有序的元素集合,它允许重复的元素。常见实现类有 ArrayListLinkedList

例子:使用 ArrayList
import java.util.ArrayList;
import java.util.List;

public class ListExample {
    public static void main(String[] args) {
        // 创建一个ArrayList
        List<String> fruits = new ArrayList<>();

        // 添加元素
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");
        fruits.add("Banana");  // List允许重复

        // 输出集合
        System.out.println(fruits);  // [Apple, Banana, Orange, Banana]

        // 获取元素
        System.out.println("第一个水果: " + fruits.get(0));  // Apple

        // 删除元素
        fruits.remove("Banana");
        System.out.println(fruits);  // [Apple, Orange, Banana]
    }
}

Collection 接口提供了一些通用的方法,用于操作集合的元素。常用的方法包括:

  • boolean add(E e):向集合中添加一个元素。
  • boolean remove(Object o):从集合中删除指定的元素。
  • boolean contains(Object o):检查集合中是否包含指定的元素。
  • boolean isEmpty():检查集合是否为空。
  • int size():返回集合中元素的数量。
  • void clear():清空集合中的所有元素。
  • Iterator<E> iterator():返回一个迭代器,用于遍历集合中的元素。

 2. Set :无序集合,不允许重复元素

Set 接口表示一个不包含重复元素的集合。常见的实现类有 HashSetTreeSet

例子:使用 HashSet
import java.util.HashSet;
import java.util.Set;

public class SetExample {
    public static void main(String[] args) {
        // 创建一个HashSet
        Set<String> fruits = new HashSet<>();

        // 添加元素
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");
        fruits.add("Banana");  // Set不允许重复

        // 输出集合
        System.out.println(fruits);  // 输出顺序不定,可能是 [Apple, Orange, Banana]
    }
}
  • 特点:Set集合不保证元素的顺序,且不允许重复元素。

Set 接口提供了几个常用的方法来操作集合:

  • add(E e):将指定元素添加到集合中。如果集合中已经存在该元素,则不添加。
  • remove(Object o):从集合中移除指定元素。
  • contains(Object o):检查集合中是否包含指定元素。
  • isEmpty():检查集合是否为空。
  • size():返回集合中元素的个数。
  • clear():移除集合中的所有元素。

 


3. Queue :队列,按照先进先出(FIFO)的顺序存储元素

    Queue 接口表示一个队列,它按照先进先出的顺序处理元素。常见实现类有 LinkedListPriorityQueue

例子:使用 LinkedList 作为队列
import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {
    public static void main(String[] args) {
        // 创建一个LinkedList,作为Queue使用
        Queue<String> queue = new LinkedList<>();

        // 添加元素
        queue.add("Apple");
        queue.add("Banana");
        queue.add("Orange");

        // 输出队列
        System.out.println("队列元素: " + queue);  // [Apple, Banana, Orange]

        // 获取并删除队列的第一个元素
        System.out.println("出队元素: " + queue.poll());  // Apple

        // 当前队列
        System.out.println("剩余队列: " + queue);  // [Banana, Orange]
    }
}

4. Map :键值对集合

Map 接口用于存储键值对。常见实现类有 HashMapTreeMap

例子:使用 HashMap
import java.util.HashMap;
import java.util.Map;

public class MapExample {
    public static void main(String[] args) {
        // 创建一个HashMap
        Map<String, Integer> fruitPrices = new HashMap<>();

        // 添加键值对
        fruitPrices.put("Apple", 5);
        fruitPrices.put("Banana", 3);
        fruitPrices.put("Orange", 4);

        // 输出键值对
        System.out.println(fruitPrices);  // {Apple=5, Banana=3, Orange=4}

        // 获取某个键对应的值
        System.out.println("Apple的价格: " + fruitPrices.get("Apple"));  // 5

        // 删除一个键值对
        fruitPrices.remove("Banana");
        System.out.println(fruitPrices);  // {Apple=5, Orange=4}
    }
}
  • 特点:Map 存储的是键值对(Key-Value),键是唯一的,而值可以重复。

Map 接口提供了几个常用的方法来操作集合:

  • put(K key, V value):将指定的键值对添加到 Map 中。如果键已存在,则更新对应的值。
  • get(Object key):根据指定的键获取对应的值。如果键不存在,返回 null
  • remove(Object key):删除指定键的键值对。
  • containsKey(Object key):检查 Map 中是否包含指定的键。
  • containsValue(Object value):检查 Map 中是否包含指定的值。
  • keySet():返回 Map 中所有键的集合。
  • values():返回 Map 中所有值的集合。
  • entrySet():返回 Map 中所有键值对的集合。

 总结

  • List: 有序集合,允许重复。
  • Set: 无序集合,不允许重复。
  • Queue: 队列,遵循先进先出(FIFO)顺序。
  • Map: 存储键值对(Key-Value),键唯一。

        这些集合接口和类都在 java.util 包中,广泛应用于存储和操作数据。你可以根据不同的需求选择不同的集合类型。

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

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

相关文章

低代码平台总览

低代码平台&#xff08;Low-Code Platform&#xff09;是一种软件开发工具&#xff0c;它允许用户通过图形化界面和少量的编码来快速构建应用程序。低代码平台的核心理念是通过抽象和最小化手工编码的方式&#xff0c;加速软件开发和部署的过程。以下是低代码平台的一些关键特性…

分布式----Ceph部署(上)

目录 一、存储基础 1.1 单机存储设备 1.2 单机存储的问题 1.3 商业存储解决方案 1.4 分布式存储&#xff08;软件定义的存储 SDS&#xff09; 1.5 分布式存储的类型 二、Ceph 简介 三、Ceph 优势 四、Ceph 架构 五、Ceph 核心组件 #Pool中数据保存方式支持两种类型&…

华为诺亚方舟新作:GUI Agent综述

1、摘要 智能代理可以做更复杂的任务。特别是模拟人类在GUI上进行交互&#xff0c;比如点击和打字。 本论文对此进行总结&#xff0c;特别是其中最关键的数据、框架和应用。 首先是数据集和基准。 其次是统一框架&#xff0c;涵盖了关键组件和分类体系。 此外是基于MLLM的GUI…

(65)使用RLS自适应滤波器进行信道均衡的MATLAB仿真

文章目录 前言一、仿真说明二、码间串扰、色散、与频率选择性衰落1. 码间串扰&#xff08;ISI&#xff09;2. 信道的色散与码间串扰3. 减少ISI的方法 三、MATLAB仿真代码四、仿真结果1.发送16QAM信号的星座图2.信道的频率响应3.接收16QAM信号的星座图4.均衡后16QAM信号的星座图…

数据结构与算法:双指针之“最长连续不重复子序列” +位运算之“求二进制中第k个数字”、“求二进制表示”、“二进制中1的个数” +整数离散化

双指针&#xff1a; 简介 常见问题分类&#xff1a; 对于一个序列&#xff0c;用两个指针维护某一段特定的区间 对于两个序列&#xff0c;维护某种次序&#xff08;譬如归并排序中合并两个有序序列的操作&#xff09; 双指针算法的最核心点在于&#xff0c;将O(N^2)的暴力…

东方通TongWeb替换Tomcat的踩坑记录

一、背景 由于信创需要&#xff0c;原来项目的用到的一些中间件、软件都要逐步替换为国产品牌&#xff0c;决定先从web容器入手&#xff0c;将Tomcat替换掉。在网上搜了一些资料&#xff0c;结合项目当前情况&#xff0c;考虑在金蝶AAS和东方通TongWeb里面选择&#xff0c;后又…

kafka 的一些问题,夺命15连问后续

16、kafka是如何做到高效读写 因为kafka本身就是分布式集群&#xff0c;可以采用分区技术&#xff0c;并行度高 读取数据可以采用稀疏索引&#xff0c;可以快速定位要消费的数据&#xff08;mysql中索引多了以后&#xff0c;写入速度就慢了&#xff09; 可以顺序写磁盘&#…

使用 Node.js 了解 MVC 模式

模型-视图-控制器 &#xff08;MVC&#xff09; 模式是 Web 开发中最流行的架构模式之一。通过将应用程序划分为三个相互关联的组件&#xff08;模型、视图和控制器&#xff09;&#xff0c;MVC 促进了有组织、可维护和可扩展的代码。Node.js 具有异步处理和庞大的生态系统&…

flink 同步oracle11g数据表到pg库

1. 关闭防火墙和selinux systemctl stop firewalld systemctl disable firewalld systemctl status firewalldvi /etc/selinux/config 修改为disabled2.安装java8 yum list java-1.8* yum install java-1.8.0-openjdk* -yjava -version3.下载和部署postgresql 看需求安装pg库…

catchadmin-webman 宝塔 部署

1&#xff1a;宝塔的php 中删除禁用函数 putenv 问题&#xff1a; 按照文档部署的时候linux&#xff08;php&#xff09; vue (本地) 无法访问后端api/login 的接口 。 解决办法&#xff1a; webman 没有配置nginx 反向代理 配置就能正常访问了

【go从零单排】接口(interface)和多态(Polymorphism)

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在Go语言中&#xff0c;interface 是一种重要的类型&#xff0c;用于定义一组方法…

第3章-需求 3.1需求的概念

产品开发的需求阶段是指立项完成之后&#xff0c;根据立项计划书的任务内容&#xff0c;对任务进行目标分解&#xff0c;形成需求文档&#xff0c;确认项目需求分解到相关责任人或部门。在需求阶段&#xff0c;需要一名具备专业技能和项目经验的工程师来把控整体需求和需求细节…

创新培养:汽车零部件图像分割

汽车零部件图像分割系统源码&#xff06;数据集分享 [yolov8-seg-C2f-DCNV3&#xff06;yolov8-seg-C2f-SCcConv等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Glob…

关于git使用的图文教程(包括基本使用,处理冲突问题等等)超详细

目录 用户签名,初始化git git提交流程图 提交到本地库 版本穿梭 分支操作 分支合并冲突 团队协作 github的使用 推送代码 克隆 拉取代码 团队协作冲突 团队协作之分支管理 推送分支到分支&#xff1a; 拉去远程库分支到本地库&#xff1a; 本地删除远程分支&am…

Linux kernel 堆溢出利用方法(二)

前言 本文我们通过我们的老朋友heap_bof来讲解Linux kernel中off-by-null的利用手法。在通过讲解另一道相对来说比较困难的kernel off-by-null docker escape来深入了解这种漏洞的利用手法。&#xff08;没了解过docker逃逸的朋友也可以看懂&#xff0c;毕竟有了root权限后&a…

【算法一周目】双指针(1)

目录 1.双指针介绍 2.移动零 解题思路 C代码实现 3.复写零 解题思路 C代码实现 4.快乐数 解题思路 C代码实现 5.盛水最多的容器 解题思路 C代码实现 1.双指针介绍 常见的双指针有两种形式&#xff0c;一种是对撞指针&#xff0c;一种是快慢指针。 对撞指针&#x…

VS2022项目配置笔记

文章目录 $(ProjectDir&#xff09;与 $(SolutionDir) 宏附加包含目录VC目录和C/C的区别 $(ProjectDir&#xff09;与 $(SolutionDir) 宏 假设有一个解决方案 MySolution&#xff0c;其中包含两个项目 ProjectA 和 ProjectB&#xff0c;目录结构如下&#xff1a; C:\Projects\…

万字长文解读机器学习——决策树

&#x1f33a;历史文章列表&#x1f33a; 机器学习——损失函数、代价函数、KL散度机器学习——特征工程、正则化、强化学习机器学习——常见算法汇总机器学习——感知机、MLP、SVM机器学习——KNN机器学习——贝叶斯机器学习——决策树机器学习——随机森林、Bagging、Boostin…

Kotlin约束泛型参数必须继承自某个父类

Kotlin约束泛型参数必须继承自某个父类 open class SuperData { }class DataA : SuperData {constructor() {println("DataA constructor")} }class DataB : SuperData {constructor() {println("DataB constructor")} }fun <T : SuperData> myfun(p…

Spring挖掘: (事务篇)

谈到事务,我们就绕不开事务的ACID四大特性,我们先来简单介绍一下何为事务 一. 概念 事务是数据库操作的最小工作单元&#xff0c;作为单个逻辑工作单元执行的一系列操作。这些操作作为一个整体一起向系统提交&#xff0c;要么都执行、要么都不执行。事务是一组不可再分割的操作…