java手动实现常见数据结构的示例代码

 更新时间:2025年02月10日 14:17:20   作者:hxung  
本文介绍了Java中常用数据结构的特点和Java实现,包括数组、动态数组、链表、栈、队列、哈希表、树、堆、图、集合、双向队列以及自定义链表,帮助开发者选择合适的数据结构以提升代码效率,感兴趣的朋友一起看看吧

在 Java 中,常用的数据结构可以通过 集合框架(Collections Framework) 实现,也可以手动实现。以下是常见数据结构及其特点,以及对应的 Java 实现示例:

1. 数组(Array)

  • 特点:固定大小、内存连续、随机访问高效。
  • 用途:存储固定数量的元素。

Java 实现

int[] array = new int[5]; // 静态数组
array[0] = 10;

2. 动态数组

(ArrayList)

  • 特点:基于数组实现,支持动态扩容,随机访问高效(O(1)),插入/删除低效(O(n))。
  • 用途:需要频繁随机访问的场景。

Java 实现

import java.util.ArrayList;
ArrayList<Integer> list = new ArrayList<>();
list.add(10);        // 添加元素
int value = list.get(0); // 访问元素

3. 链表(LinkedList)

  • 特点:基于双向链表实现,插入/删除高效(O(1)),随机访问低效(O(n))。
  • 用途:频繁插入/删除的场景。
  • Java 实现
import java.util.LinkedList;
LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.add(10);          // 添加元素
linkedList.addFirst(5);      // 头部插入
int first = linkedList.getFirst(); // 访问头部元素

4. 栈(Stack)

  • 特点:后进先出(LIFO),支持 pushpop 操作。
  • 用途:函数调用栈、表达式求值。
  • Java 实现(推荐使用 Deque):
import java.util.ArrayDeque;
ArrayDeque<Integer> stack = new ArrayDeque<>();
stack.push(10); // 压栈
int top = stack.pop(); // 弹栈

5. 队列(Queue)

  • 特点:先进先出(FIFO),支持 offerpoll 操作。
  • 用途:任务调度、广度优先搜索(BFS)。
  • Java 实现
import java.util.Queue;
import java.util.LinkedList;
Queue<Integer> queue = new LinkedList<>();
queue.offer(10); // 入队
int head = queue.poll(); // 出队

6. 哈希表(HashMap)

  • 特点:基于哈希表实现,键值对存储,查找高效(平均 O(1)),无序。
  • 用途:快速查找、去重。
  • Java 实现
import java.util.HashMap;
HashMap<String, Integer> map = new HashMap<>();
map.put("Alice", 25); // 添加键值对
int age = map.get("Alice"); // 查找

7. 树(TreeSet/TreeMap)

  • 特点:基于红黑树实现,元素自动排序(按自然顺序或自定义比较器),查找/插入/删除时间复杂度为 O(log n)。
  • 用途:需要有序存储的场景。
  • Java 实现
import java.util.TreeSet;
TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.add(10);
treeSet.add(5); // 自动排序为 [5, 10]

8. 堆(PriorityQueue)

  • 特点:基于堆(默认最小堆)实现,元素按优先级排序。
  • 用途:任务调度、求 Top K 问题。
  • Java 实现
import java.util.PriorityQueue;
PriorityQueue<Integer> heap = new PriorityQueue<>();
heap.offer(10);
heap.offer(5); // 堆顶为 5
int min = heap.poll(); // 弹出最小值 5

9. 图(Graph)

  • 特点:节点和边的集合,通常通过邻接表或邻接矩阵实现。
  • 用途:社交网络、路径规划。
  • Java 实现(邻接表):
import java.util.*;
class Graph {
    private Map<Integer, List<Integer>> adjacencyList = new HashMap<>();
    public void addEdge(int src, int dest) {
        adjacencyList.computeIfAbsent(src, k -> new ArrayList<>()).add(dest);
        adjacencyList.computeIfAbsent(dest, k -> new ArrayList<>()).add(src); // 无向图
    }
}

10. 集合(Set)

  • 特点:不允许重复元素。
  • Java 实现HashSetTreeSet):
import java.util.HashSet;
HashSet<String> set = new HashSet<>();
set.add("Apple");
set.add("Apple"); // 重复元素会被忽略

11. 双向队列(Deque)

  • 特点:支持两端插入和删除。
  • 用途:滑动窗口、双端操作。
  • Java 实现
import java.util.ArrayDeque;
ArrayDeque<Integer> deque = new ArrayDeque<>();
deque.addFirst(10);
deque.addLast(20);
int first = deque.removeFirst();

12. 自定义链表(手动实现)

class Node {
    int data;
    Node next;
    Node(int data) {
        this.data = data;
        this.next = null;
    }
}
class LinkedList {
    Node head;
    public void add(int data) {
        Node newNode = new Node(data);
        if (head == null) {
            head = newNode;
        } else {
            Node current = head;
            while (current.next != null) {
                current = current.next;
            }
            current.next = newNode;
        }
    }
}

总结

Java 提供了丰富的内置数据结构(通过 java.util 包),开发者可以根据需求选择合适的结构:

  • 快速查找HashMapHashSet
  • 有序存储TreeMapTreeSet
  • ​​​​​​​高效插入/删除LinkedListArrayDeque
  • ​​​​​​​动态扩容ArrayList
  • ​​​​​​​优先级处理PriorityQueue

掌握这些数据结构的特点和使用场景,可以显著提升代码效率和可维护性!

到此这篇关于java手动实现常见数据结构的文章就介绍到这了,更多相关java常见数据结构内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot集成jersey打包jar找不到class的处理方法

    SpringBoot集成jersey打包jar找不到class的处理方法

    这篇文章主要介绍了SpringBoot集成jersey打包jar找不到class的处理方法,文中通过代码示例介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-03-03
  • 深入理解Java序列化与反序列化

    深入理解Java序列化与反序列化

    今天教大家深入理解Java的序列化与反序列化,文中介绍的非常详细,有很多代码示例,对正在学习Java的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • Servlet实现简单的用户登录功能实例代码

    Servlet实现简单的用户登录功能实例代码

    这篇文章主要给大家介绍了关于利用Servlet实现简单的用户登录功能的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Java定义栈结构,并实现入栈、出栈操作完整示例

    Java定义栈结构,并实现入栈、出栈操作完整示例

    这篇文章主要介绍了Java定义栈结构,并实现入栈、出栈操作,结合完整实例形式分析了java数据结构中栈的定义、以及入栈、出栈、栈是否为空判断、栈大小计算、打印栈元素等相关操作技巧,需要的朋友可以参考下
    2020-02-02
  • Javaweb会话跟踪技术Cookie和Session的具体使用

    Javaweb会话跟踪技术Cookie和Session的具体使用

    本文主要介绍了Javaweb会话跟踪技术Cookie&Session的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 解决@Cacheable在同一个类中方法调用不起作用的问题

    解决@Cacheable在同一个类中方法调用不起作用的问题

    这篇文章主要介绍了解决@Cacheable在同一个类中方法调用不起作用的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java设计模式中的门面模式详解

    Java设计模式中的门面模式详解

    门面模式又叫外观模式(Facade Pattern),主要用于隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口,本文通过实例代码给大家介绍下java门面模式的相关知识,感兴趣的朋友一起看看吧
    2022-09-09
  • SpringAop拦截参数带注解的方法

    SpringAop拦截参数带注解的方法

    这篇文章主要介绍了SpringAop拦截参数带注解的方法,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-12-12
  • Mybatis ResultMap和分页操作示例详解

    Mybatis ResultMap和分页操作示例详解

    这篇文章主要为大家介绍了Mybatis ResultMap和分页操作示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • 如何使用Java生成具有安全哈希的QR码

    如何使用Java生成具有安全哈希的QR码

    这篇文章主要介绍了如何使用Java生成具有安全哈希的QR码,这是关于如何在Java中使用salt生成QR代码和安全散列字符串的分步教程。,需要的朋友可以参考下
    2019-06-06

最新评论