当前位置: 代码网 > it编程>编程语言>Java > java手动实现常见数据结构的示例代码

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

2025年02月11日 Java 我要评论
在 java 中,常用的数据结构可以通过 集合框架(collections framework) 实现,也可以手动实现。以下是常见数据结构及其特点,以及对应的 java 实现示例:1. 数组(arra

在 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常见数据结构内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com