码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • java中Array(数组)、List(列表)、Set(集合)、Map(映射)、Queue(队列)详解


    1. 数组(Array)

    概念

    数组是存储固定大小相同类型元素的集合。数组在Java中是静态的,长度一旦确定就不能改变。

    特点
    • 固定大小:数组长度固定,不能动态改变。
    • 索引访问:通过索引(从0开始)快速访问元素。
    • 类型一致:数组中的所有元素必须是相同类型。
    示例
    int[] numbers = new int[5]; // 声明一个包含5个整数的数组
    numbers[0] = 1; // 向数组中赋值
    System.out.println(numbers[0]); // 输出数组的第一个元素
    
    优缺点
    • 优点:访问和修改速度快,适合固定大小的数据集。
    • 缺点:大小不可变,不适合需要动态添加或删除元素的场景。

    2. 列表(List)

    概念

    列表是一个有序的集合,允许重复元素,并且可以动态调整大小。列表是Java集合框架的一部分,最常用的实现是ArrayList和LinkedList。

    特点
    • 动态大小:可以根据需要自动扩展或缩减。
    • 有序:元素按照插入顺序排列。
    • 类型一致:列表中的所有元素通常是同一类型,但可以通过泛型支持不同类型(如List)。
      示例
      import java.util.ArrayList;
      import java.util.List;
      
      List<String> list = new ArrayList<>();
      list.add("Apple");
      list.add("Banana");
      System.out.println(list.get(0)); // 输出 "Apple"
      
      ArrayList vs LinkedList
      • ArrayList:底层基于数组,访问速度快,但插入和删除元素速度相对慢(需要移动元素)。
      • LinkedList:底层基于双向链表,插入和删除速度快,但访问速度相对慢(需要遍历链表)。
      优缺点
      • 优点:动态调整大小,适合需要频繁添加、删除操作的数据集。
      • 缺点:访问速度比数组慢(尤其是LinkedList)。

      3. 集合(Set)

      概念

      集合是一个不允许重复元素的无序集合。常用的实现有HashSet和TreeSet。

      特点
      • 无序:元素没有特定顺序(TreeSet是按自然顺序排序)。
      • 唯一性:不允许重复元素。
      示例
      import java.util.HashSet;
      import java.util.Set;
      
      Set<String> set = new HashSet<>();
      set.add("Apple");
      set.add("Banana");
      set.add("Apple"); // 尝试添加重复元素
      System.out.println(set.size()); // 输出 2,因为集合不允许重复
      
      HashSet vs TreeSet
      • HashSet:基于哈希表,操作速度快,但元素无序。
      • TreeSet:基于红黑树,元素有序,但操作速度相对慢。
      优缺点
      • 优点:保证元素唯一,适合需要快速查找和去重的数据集。
      • 缺点:不保留插入顺序,TreeSet操作性能较HashSet低。

      4. 映射(Map)

      概念

      映射是一个键值对的集合,每个键唯一映射到一个值。常用的实现有HashMap和TreeMap。

      特点
      • 键唯一:每个键只能对应一个值。
      • 键值对:存储的是键值对,可以通过键快速访问对应的值。
      示例
      import java.util.HashMap;
      import java.util.Map;
      
      Map<String, Integer> map = new HashMap<>();
      map.put("Apple", 1);
      map.put("Banana", 2);
      System.out.println(map.get("Apple")); // 输出 1
      
      HashMap vs TreeMap
      • HashMap:基于哈希表,键值对无序,但操作速度快。
      • TreeMap:基于红黑树,键值对按键的自然顺序排序,但操作速度相对慢。
      优缺点
      • 优点:可以快速访问、插入、删除键值对,适合映射关系的数据集。
      • 缺点:TreeMap性能较低,HashMap不保留顺序。

      5. 队列(Queue)

      概念

      队列是一种按顺序处理元素的集合,支持FIFO(先进先出)原则。常用的实现有LinkedList和PriorityQueue。

      特点
      • FIFO:先进先出,最早加入的元素最先处理。
      • 优先级队列:PriorityQueue按优先级处理元素(最高优先级最先处理)。
      示例
      import java.util.LinkedList;
      import java.util.Queue;
      
      Queue<String> queue = new LinkedList<>();
      queue.add("Apple");
      queue.add("Banana");
      System.out.println(queue.poll()); // 输出 "Apple"
      
      优缺点
      • 优点:适合需要顺序处理元素的场景。
      • 缺点:不支持随机访问,只能按顺序操作。

      总结

      数据结构特点适用场景
      数组(Array)固定大小,索引访问,类型一致固定大小数据集,快速访问
      列表(List)动态大小,有序,允许重复需要频繁添加、删除元素的数据集
      集合(Set)无序,不允许重复元素快速查找,去重
      映射(Map)键值对,键唯一映射关系的数据集,快速访问键对应的值
      队列(Queue)FIFO顺序处理元素按顺序处理元素的场景

      掌握这些基本数据结构及其应用场景,能够帮助你更有效地处理和管理数据,从而编写更高效的Java程序。

    • 相关阅读:
      Tomcat常见报错以及手动实现Tomcat
      定时任务1
      asp.net core之路由
      IntelliJ IDEA 2023.2.1 (Ultimate Edition) 版本 Git 如何合并多次的本地提交进行 Push
      shiro与springMVC整合
      【设计模式】软件设计原则
      快速支持客户知识库的核心优势是什么?
      zookeeper集群搭建
      vscode平台上通过Embedded IDE搭建单片机开发环境
      leetcode - 2038. Remove Colored Pieces if Both Neighbors are the Same Color
    • 原文地址:https://blog.csdn.net/2301_79858914/article/details/139717631
      • 最新文章
      • 攻防演习之三天拿下官网站群
        数据安全治理学习——前期安全规划和安全管理体系建设
        企业安全 | 企业内一次钓鱼演练准备过程
        内网渗透测试 | Kerberos协议及其部分攻击手法
        0day的产生 | 不懂代码的"代码审计"
        安装scrcpy-client模块av模块异常,环境问题解决方案
        leetcode hot100【LeetCode 279. 完全平方数】java实现
        OpenWrt下安装Mosquitto
        AnatoMask论文汇总
        【AI日记】24.11.01 LangChain、openai api和github copilot
      • 热门文章
      • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
        奉劝各位学弟学妹们,该打造你的技术影响力了!
        五年了,我在 CSDN 的两个一百万。
        Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
        面试官都震惊,你这网络基础可以啊!
        你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
        心情不好的时候,用 Python 画棵樱花树送给自己吧
        通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
        13 万字 C 语言从入门到精通保姆级教程2021 年版
        10行代码集2000张美女图,Python爬虫120例,再上征途
      Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
      正则表达式工具 cron表达式工具 密码生成工具

      京公网安备 11010502049817号