当前位置: 首页 > news >正文

力扣 外传之数据结构java篇

 本文为笔者数据结构部分笔记

笔者根据数据结构理论加上最近刷题整理了一套 数据结构理论加常用方法以下为该文章:

力扣外传之数据结构(一篇文章搞定数据结构)

Java 数据结构概述

Java 提供了丰富的数据结构实现,主要通过 java.util 包中的集合框架(Collections Framework)提供。这些数据结构可分为以下几类:

线性数据结构
  1. 数组(Array)

    • 固定大小,通过索引访问元素。
    • 示例代码:
      int[] arr = new int[5];  
      arr[0] = 10;  
      

  2. ArrayList

    • 动态数组,支持自动扩容。
    • 示例代码:
      ArrayList<String> list = new ArrayList<>();  
      list.add("Java");  
      

  3. LinkedList

    • 双向链表实现,适合频繁插入/删除操作。
    • 示例代码:
      LinkedList<Integer> linkedList = new LinkedList<>();  
      linkedList.add(1);  
      

  4. Stack

    • 后进先出(LIFO)结构,继承自 Vector
    • 示例代码:
      Stack<String> stack = new Stack<>();  
      stack.push("A");  
      

  5. Queue

    • 先进先出(FIFO)接口,常用实现类为 LinkedListPriorityQueue
    • 示例代码:
      Queue<Integer> queue = new LinkedList<>();  
      queue.offer(10);  
      

树形数据结构
  1. TreeSet

    • 基于红黑树实现的有序集合,元素唯一且自动排序。
    • 示例代码:
      TreeSet<Integer> treeSet = new TreeSet<>();  
      treeSet.add(5);  
      

  2. TreeMap

    • 基于红黑树的键值对结构,按键排序。
    • 示例代码:
      TreeMap<String, Integer> treeMap = new TreeMap<>();  
      treeMap.put("Key", 100);  
      

哈希表相关
  1. HashSet

    • 基于哈希表的无序集合,元素唯一。
    • 示例代码:
      HashSet<String> hashSet = new HashSet<>();  
      hashSet.add("Java");  
      

  2. HashMap

    • 基于哈希表的键值对结构,允许 null 键和值。
    • 示例代码:
      HashMap<String, Integer> map = new HashMap<>();  
      map.put("A", 1);  
      

  3. LinkedHashMap

    • 保留插入顺序的哈希表。
    • 示例代码:
      LinkedHashMap<String, Integer> linkedMap = new LinkedHashMap<>();  
      linkedMap.put("B", 2);  
      

堆结构
  1. PriorityQueue
    • 基于优先级的堆实现,默认最小堆。
    • 示例代码:
      PriorityQueue<Integer> pq = new PriorityQueue<>();  
      pq.offer(3);  
      

选择数据结构的准则

  • 随机访问:优先使用 ArrayList
  • 频繁插入/删除:选择 LinkedList
  • 键值存储HashMap(无序)或 TreeMap(有序)。
  • 去重需求HashSetTreeSet
  • 线程安全:考虑 ConcurrentHashMapCopyOnWriteArrayList

注意事项

  • 使用泛型(如 ArrayList<String>)避免类型转换错误。
  • 注意 HashMap 的负载因子和扩容机制对性能的影响。
  • 树形结构的操作时间复杂度通常为 O(log n),而哈希表为 O(1)。

Java 数据结构概述

Java 提供了丰富的数据结构实现,主要通过 java.util 包中的集合框架(Collections Framework)提供。这些数据结构可分为以下几类:

线性数据结构
  1. 数组(Array)

    • 固定大小,通过索引访问元素。
    • 示例代码:
      int[] arr = new int[5];  
      arr[0] = 10;  
      

  2. ArrayList

    • 动态数组,支持自动扩容。
    • 示例代码:
      ArrayList<String> list = new ArrayList<>();  
      list.add("Java");  
      

  3. LinkedList

    • 双向链表实现,适合频繁插入/删除操作。
    • 示例代码:
      LinkedList<Integer> linkedList = new LinkedList<>();  
      linkedList.add(1);  
      

  4. Stack

    • 后进先出(LIFO)结构,继承自 Vector
    • 示例代码:
      Stack<String> stack = new Stack<>();  
      stack.push("A");  
      

  5. Queue

    • 先进先出(FIFO)接口,常用实现类为 LinkedListPriorityQueue
    • 示例代码:
      Queue<Integer> queue = new LinkedList<>();  
      queue.offer(10);  
      

树形数据结构
  1. TreeSet

    • 基于红黑树实现的有序集合,元素唯一且自动排序。
    • 示例代码:
      TreeSet<Integer> treeSet = new TreeSet<>();  
      treeSet.add(5);  
      

  2. TreeMap

    • 基于红黑树的键值对结构,按键排序。
    • 示例代码:
      TreeMap<String, Integer> treeMap = new TreeMap<>();  
      treeMap.put("Key", 100);  
      

哈希表相关
  1. HashSet

    • 基于哈希表的无序集合,元素唯一。
    • 示例代码:
      HashSet<String> hashSet = new HashSet<>();  
      hashSet.add("Java");  
      

  2. HashMap

    • 基于哈希表的键值对结构,允许 null 键和值。
    • 示例代码:
      HashMap<String, Integer> map = new HashMap<>();  
      map.put("A", 1);  
      

  3. LinkedHashMap

    • 保留插入顺序的哈希表。
    • 示例代码:
      LinkedHashMap<String, Integer> linkedMap = new LinkedHashMap<>();  
      linkedMap.put("B", 2);  
      

堆结构
  1. PriorityQueue
    • 基于优先级的堆实现,默认最小堆。
    • 示例代码:
      PriorityQueue<Integer> pq = new PriorityQueue<>();  
      pq.offer(3);  
      

选择数据结构的准则

  • 随机访问:优先使用 ArrayList
  • 频繁插入/删除:选择 LinkedList
  • 键值存储HashMap(无序)或 TreeMap(有序)。
  • 去重需求HashSetTreeSet
  • 线程安全:考虑 ConcurrentHashMapCopyOnWriteArrayList

注意事项

  • 使用泛型(如 ArrayList<String>)避免类型转换错误。
  • 注意 HashMap 的负载因子和扩容机制对性能的影响。
  • 树形结构的操作时间复杂度通常为 O(log n),而哈希表为 O(1)。

http://www.xdnf.cn/news/1299331.html

相关文章:

  • latex 中破折号的输入
  • 【51单片机学习】定时器、串口、LED点阵屏、DS1302实时时钟、蜂鸣器
  • 华为实验WLAN 基础配置随练
  • 解剖HashMap的put流程 <一> (JDK 1.8)
  • 设计模式(2)
  • app-4 日志上传
  • Linux编程--进程
  • web请求和响应
  • SpringMVC(详细版从入门到精通)未完
  • 【科研绘图系列】R语言绘制蝶形条形图蝶形柱状堆积图
  • 【22-决策树】
  • 一款开源的远程桌面软件,旨在为用户提供流畅的游戏体验,支持 2K 分辨率、60 FPS,延迟仅为 40ms。
  • 多种适用于 MCU 固件的 OTA 升级方案
  • PHP现代化全栈开发:实时应用与WebSockets实践
  • 智能门锁:安全与便捷的现代家居入口
  • CMake笔记:Alias Target在哪些地方可以使用
  • python的艺术品收藏管理系统
  • [激光原理与应用-267]:理论 - 几何光学 - 胶卷相机的组成和工作原理
  • pytorch学习笔记-Loss的使用、在神经网络中加入Loss、优化器(optimizer)的使用
  • Video-R1论文解读
  • 前端框架选择之争:jQuery与Vue在现代Web开发中的真实地位-优雅草卓伊凡
  • 哈希表特性与unordered_map/unordered_set实现分析
  • 【Linux学习|黑马笔记|Day4】IP地址、主机名、网络请求、下载、端口、进程管理、主机状态监控、环境变量、文件的上传和下载、压缩和解压
  • 将 pdf 转为高清 jpg
  • OpenBMC中C++策略模式架构、原理与应用
  • 设计模式基础概念(行为模式):策略模式
  • c/c++实现 TCP Socket网络通信
  • ASCII与Unicode:编码世界的奥秘
  • 阿里云TranslateGeneral - 机器翻译SDK-自己封账单文件版本—仙盟创梦IDE
  • 机器学习实战篇--TF-IDF实战--名著红楼梦的文本数据处理