亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java手動(dòng)實(shí)現(xiàn)常見數(shù)據(jù)結(jié)構(gòu)的示例代碼

 更新時(shí)間:2025年02月10日 14:17:20   作者:hxung  
本文介紹了Java中常用數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)和Java實(shí)現(xiàn),包括數(shù)組、動(dòng)態(tài)數(shù)組、鏈表、棧、隊(duì)列、哈希表、樹、堆、圖、集合、雙向隊(duì)列以及自定義鏈表,幫助開發(fā)者選擇合適的數(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),支持 pushpop 操作。
  • 用途:函數(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),支持 offerpoll 操作。
  • 用途:任務(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)HashSetTreeSet):
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):

  • 快速查找HashMapHashSet
  • 有序存儲(chǔ)TreeMapTreeSet
  • ???????高效插入/刪除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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

    這篇文章主要介紹了SpringBoot集成jersey打包jar找不到class的處理方法,文中通過代碼示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • 深入理解Java序列化與反序列化

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

    今天教大家深入理解Java的序列化與反序列化,文中介紹的非常詳細(xì),有很多代碼示例,對(duì)正在學(xué)習(xí)Java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • Servlet實(shí)現(xiàn)簡(jiǎn)單的用戶登錄功能實(shí)例代碼

    Servlet實(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-12
  • Java定義棧結(jié)構(gòu),并實(shí)現(xiàn)入棧、出棧操作完整示例

    Java定義棧結(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-02
  • Javaweb會(huì)話跟蹤技術(shù)Cookie和Session的具體使用

    Javaweb會(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)用不起作用的問題

    這篇文章主要介紹了解決@Cacheable在同一個(gè)類中方法調(diào)用不起作用的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java設(shè)計(jì)模式中的門面模式詳解

    Java設(shè)計(jì)模式中的門面模式詳解

    門面模式又叫外觀模式(Facade Pattern),主要用于隱藏系統(tǒng)的復(fù)雜性,并向客戶端提供了一個(gè)客戶端可以訪問系統(tǒng)的接口,本文通過實(shí)例代碼給大家介紹下java門面模式的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2022-09-09
  • SpringAop攔截參數(shù)帶注解的方法

    SpringAop攔截參數(shù)帶注解的方法

    這篇文章主要介紹了SpringAop攔截參數(shù)帶注解的方法,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2024-12-12
  • Mybatis?ResultMap和分頁操作示例詳解

    Mybatis?ResultMap和分頁操作示例詳解

    這篇文章主要為大家介紹了Mybatis?ResultMap和分頁操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 如何使用Java生成具有安全哈希的QR碼

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

    這篇文章主要介紹了如何使用Java生成具有安全哈希的QR碼,這是關(guān)于如何在Java中使用salt生成QR代碼和安全散列字符串的分步教程。,需要的朋友可以參考下
    2019-06-06

最新評(píng)論