java手動(dòng)實(shí)現(xiàn)常見數(shù)據(jù)結(jié)構(gòu)的示例代碼
在 Java 中,常用的數(shù)據(jù)結(jié)構(gòu)可以通過 集合框架(Collections Framework) 實(shí)現(xiàn),也可以手動(dòng)實(shí)現(xiàn)。以下是常見數(shù)據(jù)結(jié)構(gòu)及其特點(diǎn),以及對(duì)應(yīng)的 Java 實(shí)現(xiàn)示例:
1. 數(shù)組(Array)
- 特點(diǎn):固定大小、內(nèi)存連續(xù)、隨機(jī)訪問高效。
- 用途:存儲(chǔ)固定數(shù)量的元素。
Java 實(shí)現(xiàn):
int[] array = new int[5]; // 靜態(tài)數(shù)組 array[0] = 10;
2. 動(dòng)態(tài)數(shù)組
(ArrayList)
- 特點(diǎn):基于數(shù)組實(shí)現(xiàn),支持動(dòng)態(tài)擴(kuò)容,隨機(jī)訪問高效(O(1)),插入/刪除低效(O(n))。
- 用途:需要頻繁隨機(jī)訪問的場(chǎng)景。
Java 實(shí)現(xiàn):
import java.util.ArrayList; ArrayList<Integer> list = new ArrayList<>(); list.add(10); // 添加元素 int value = list.get(0); // 訪問元素
3. 鏈表(LinkedList)
- 特點(diǎn):基于雙向鏈表實(shí)現(xiàn),插入/刪除高效(O(1)),隨機(jī)訪問低效(O(n))。
- 用途:頻繁插入/刪除的場(chǎng)景。
- Java 實(shí)現(xiàn):
import java.util.LinkedList; LinkedList<Integer> linkedList = new LinkedList<>(); linkedList.add(10); // 添加元素 linkedList.addFirst(5); // 頭部插入 int first = linkedList.getFirst(); // 訪問頭部元素
4. 棧(Stack)
- 特點(diǎn):后進(jìn)先出(LIFO),支持
push
和pop
操作。 - 用途:函數(shù)調(diào)用棧、表達(dá)式求值。
- Java 實(shí)現(xiàn)(推薦使用
Deque
):
import java.util.ArrayDeque; ArrayDeque<Integer> stack = new ArrayDeque<>(); stack.push(10); // 壓棧 int top = stack.pop(); // 彈棧
5. 隊(duì)列(Queue)
- 特點(diǎn):先進(jìn)先出(FIFO),支持
offer
和poll
操作。 - 用途:任務(wù)調(diào)度、廣度優(yōu)先搜索(BFS)。
- Java 實(shí)現(xiàn):
import java.util.Queue; import java.util.LinkedList; Queue<Integer> queue = new LinkedList<>(); queue.offer(10); // 入隊(duì) int head = queue.poll(); // 出隊(duì)
6. 哈希表(HashMap)
- 特點(diǎn):基于哈希表實(shí)現(xiàn),鍵值對(duì)存儲(chǔ),查找高效(平均 O(1)),無序。
- 用途:快速查找、去重。
- Java 實(shí)現(xiàn):
import java.util.HashMap; HashMap<String, Integer> map = new HashMap<>(); map.put("Alice", 25); // 添加鍵值對(duì) int age = map.get("Alice"); // 查找
7. 樹(TreeSet/TreeMap)
- 特點(diǎn):基于紅黑樹實(shí)現(xiàn),元素自動(dòng)排序(按自然順序或自定義比較器),查找/插入/刪除時(shí)間復(fù)雜度為 O(log n)。
- 用途:需要有序存儲(chǔ)的場(chǎng)景。
- Java 實(shí)現(xiàn):
import java.util.TreeSet; TreeSet<Integer> treeSet = new TreeSet<>(); treeSet.add(10); treeSet.add(5); // 自動(dòng)排序?yàn)?[5, 10]
8. 堆(PriorityQueue)
- 特點(diǎn):基于堆(默認(rèn)最小堆)實(shí)現(xiàn),元素按優(yōu)先級(jí)排序。
- 用途:任務(wù)調(diào)度、求 Top K 問題。
- Java 實(shí)現(xiàn):
import java.util.PriorityQueue; PriorityQueue<Integer> heap = new PriorityQueue<>(); heap.offer(10); heap.offer(5); // 堆頂為 5 int min = heap.poll(); // 彈出最小值 5
9. 圖(Graph)
- 特點(diǎn):節(jié)點(diǎn)和邊的集合,通常通過鄰接表或鄰接矩陣實(shí)現(xiàn)。
- 用途:社交網(wǎng)絡(luò)、路徑規(guī)劃。
- Java 實(shí)現(xiàn)(鄰接表):
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)
- 特點(diǎn):不允許重復(fù)元素。
- Java 實(shí)現(xiàn)(
HashSet
和TreeSet
):
import java.util.HashSet; HashSet<String> set = new HashSet<>(); set.add("Apple"); set.add("Apple"); // 重復(fù)元素會(huì)被忽略
11. 雙向隊(duì)列(Deque)
- 特點(diǎn):支持兩端插入和刪除。
- 用途:滑動(dòng)窗口、雙端操作。
- Java 實(shí)現(xiàn):
import java.util.ArrayDeque; ArrayDeque<Integer> deque = new ArrayDeque<>(); deque.addFirst(10); deque.addLast(20); int first = deque.removeFirst();
12. 自定義鏈表(手動(dòng)實(shí)現(xiàn))
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; } } }
總結(jié)
Java 提供了豐富的內(nèi)置數(shù)據(jù)結(jié)構(gòu)(通過 java.util
包),開發(fā)者可以根據(jù)需求選擇合適的結(jié)構(gòu):
- 快速查找:
HashMap
、HashSet
- 有序存儲(chǔ):
TreeMap
、TreeSet
- ???????高效插入/刪除:
LinkedList
、ArrayDeque
- ???????動(dòng)態(tài)擴(kuò)容:
ArrayList
- ???????優(yōu)先級(jí)處理:
PriorityQueue
掌握這些數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)和使用場(chǎng)景,可以顯著提升代碼效率和可維護(hù)性!
到此這篇關(guān)于java手動(dòng)實(shí)現(xiàn)常見數(shù)據(jù)結(jié)構(gòu)的文章就介紹到這了,更多相關(guān)java常見數(shù)據(jù)結(jié)構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java數(shù)據(jù)結(jié)構(gòu)之紅黑樹的實(shí)現(xiàn)方法和原理詳解
- Java數(shù)據(jù)結(jié)構(gòu)中七種排序算法實(shí)現(xiàn)詳解
- Java數(shù)據(jù)結(jié)構(gòu)中關(guān)于AVL樹的實(shí)現(xiàn)方法詳解
- Java數(shù)據(jù)結(jié)構(gòu)和算法之鏈表詳解
- Java數(shù)據(jù)結(jié)構(gòu)篇之實(shí)現(xiàn)二叉搜索樹的核心方法
- Java數(shù)據(jù)結(jié)構(gòu)與算法之二分查找詳解
- Java數(shù)據(jù)結(jié)構(gòu)中的HashMap和HashSet詳解
- Java常見的數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列詳解
相關(guān)文章
SpringBoot集成jersey打包jar找不到class的處理方法
這篇文章主要介紹了SpringBoot集成jersey打包jar找不到class的處理方法,文中通過代碼示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-03-03Servlet實(shí)現(xiàn)簡(jiǎn)單的用戶登錄功能實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于利用Servlet實(shí)現(xiàn)簡(jiǎn)單的用戶登錄功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Java定義棧結(jié)構(gòu),并實(shí)現(xiàn)入棧、出棧操作完整示例
這篇文章主要介紹了Java定義棧結(jié)構(gòu),并實(shí)現(xiàn)入棧、出棧操作,結(jié)合完整實(shí)例形式分析了java數(shù)據(jù)結(jié)構(gòu)中棧的定義、以及入棧、出棧、棧是否為空判斷、棧大小計(jì)算、打印棧元素等相關(guān)操作技巧,需要的朋友可以參考下2020-02-02Javaweb會(huì)話跟蹤技術(shù)Cookie和Session的具體使用
本文主要介紹了Javaweb會(huì)話跟蹤技術(shù)Cookie&Session的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07解決@Cacheable在同一個(gè)類中方法調(diào)用不起作用的問題
這篇文章主要介紹了解決@Cacheable在同一個(gè)類中方法調(diào)用不起作用的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07