自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java中常見的數(shù)據(jù)結(jié)構(gòu)及示例講解

開發(fā)
一起來(lái)了解一下Java中常見的數(shù)據(jù)結(jié)構(gòu)及示例講解都有哪些。

Java中常見的數(shù)據(jù)結(jié)構(gòu)包括以下幾種:

1.數(shù)組(Array):是一種線性數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)相同類型的元素,通過(guò)索引訪問和修改元素。

2.鏈表(Linked List):也是一種線性數(shù)據(jù)結(jié)構(gòu),由節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)包含數(shù)據(jù)和指向下一個(gè)節(jié)點(diǎn)的引用。

3.棧(Stack):是一種后進(jìn)先出(LIFO)的數(shù)據(jù)結(jié)構(gòu),只能在棧頂進(jìn)行插入和刪除操作。

4.隊(duì)列(Queue):是一種先進(jìn)先出(FIFO)的數(shù)據(jù)結(jié)構(gòu),可以在隊(duì)尾插入元素,在隊(duì)頭刪除元素。

5.哈希表(HashMap):是一種使用鍵-值對(duì)存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),通過(guò)哈希函數(shù)將鍵映射到一個(gè)索引,可以快速訪問和修改數(shù)據(jù)。

6.集合(Set):是一種不允許重復(fù)元素的數(shù)據(jù)結(jié)構(gòu),常見的實(shí)現(xiàn)類有HashSet和TreeSet。

7.列表(List):是一種有序的數(shù)據(jù)結(jié)構(gòu),允許重復(fù)元素,常見的實(shí)現(xiàn)類有ArrayList和LinkedList。

8.樹(Tree):是一種非線性數(shù)據(jù)結(jié)構(gòu),由節(jié)點(diǎn)和邊組成,每個(gè)節(jié)點(diǎn)可以有多個(gè)子節(jié)點(diǎn),常見的實(shí)現(xiàn)有二叉樹、AVL樹等。

9.圖(Graph):是一種由節(jié)點(diǎn)和邊組成的非線性數(shù)據(jù)結(jié)構(gòu),節(jié)點(diǎn)之間可以有多個(gè)連接關(guān)系。

10.堆(Heap):是一種特殊的樹形數(shù)據(jù)結(jié)構(gòu),用于高效地找到最大或最小值。

除了上述常見的數(shù)據(jù)結(jié)構(gòu),Java還提供了許多其他數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn),如優(yōu)先隊(duì)列、雙向鏈表、散列表等,可以根據(jù)具體的需求選擇適合的數(shù)據(jù)結(jié)構(gòu)。

接下來(lái),我門通過(guò)一些示例代碼來(lái)介紹這些常見的數(shù)據(jù)結(jié)構(gòu)。下面是一些簡(jiǎn)單的示例代碼:

1.數(shù)組(Array):

int[] numbers = new int[5]; // 創(chuàng)建一個(gè)長(zhǎng)度為5的整型數(shù)組
numbers[0] = 1; // 設(shè)置第一個(gè)元素的值為1
int element = numbers[2]; // 獲取第三個(gè)元素的值
System.out.println(element); // 輸出結(jié)果:0(默認(rèn)值,因?yàn)闆]有賦值)

2.鏈表(Linked List):

// 創(chuàng)建鏈表節(jié)點(diǎn)
class ListNode {
    int value;
    ListNode next;
    ListNode(int value) {
        this.value = value;
        this.next = null;
    }
}




// 創(chuàng)建鏈表
ListNode head = new ListNode(1); // 頭節(jié)點(diǎn)
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);




head.next = node2;
node2.next = node3;




// 遍歷鏈表
ListNode current = head;
while (current != null) {
    System.out.println(current.value);
    current = current.next;
}

3.棧(Stack):

import java.util.Stack;
Stack<Integer> stack = new Stack<>();
stack.push(1); // 添加元素到棧頂
stack.push(2);
stack.push(3);




int topElement = stack.peek(); // 獲取棧頂元素(不移除)
System.out.println(topElement); // 輸出結(jié)果:3




int poppedElement = stack.pop(); // 彈出棧頂元素
System.out.println(poppedElement); // 輸出結(jié)果:3

4.隊(duì)列(Queue):

import java.util.LinkedList;
import java.util.Queue;


Queue<Integer> queue = new LinkedList<>();
queue.offer(1); // 添加元素到隊(duì)尾
queue.offer(2);
queue.offer(3);


int frontElement = queue.peek(); // 獲取隊(duì)頭元素(不移除)
System.out.println(frontElement); // 輸出結(jié)果:1
int dequeuedElement = queue.poll(); // 出隊(duì)隊(duì)頭元素
System.out.println(dequeuedElement); // 輸出結(jié)果:1

當(dāng)談到哈希和集合這兩個(gè)概念時(shí),通常會(huì)涉及到哈希表和集合數(shù)據(jù)結(jié)構(gòu)。

5.哈希表(Hash Table)示例:

import java.util.HashMap;


HashMap<String, Integer> hashMap = new HashMap<>();
hashMap.put("apple", 1);   // 向哈希表中插入鍵值對(duì)
hashMap.put("banana", 2);
hashMap.put("orange", 3);


int value = hashMap.get("banana");  // 通過(guò)鍵獲取對(duì)應(yīng)的值
System.out.println(value);  // 輸出結(jié)果:2


boolean containsKey = hashMap.containsKey("apple");  // 檢查哈希表中是否包含某個(gè)鍵
System.out.println(containsKey);  // 輸出結(jié)果:true


hashMap.remove("orange");  // 移除指定鍵的鍵值對(duì)


for (String key : hashMap.keySet()) {
    int val = hashMap.get(key);
    System.out.println(key + ": " + val);
}

在上面的例子中,我們使用HashMap類來(lái)實(shí)現(xiàn)哈希表。我們插入了幾個(gè)鍵值對(duì),然后通過(guò)鍵來(lái)獲取對(duì)應(yīng)的值,檢查是否存在某個(gè)鍵,并移除指定鍵的鍵值對(duì)。還展示了如何遍歷哈希表的鍵集合,并獲取每個(gè)鍵對(duì)應(yīng)的值。

6.集合(Set)示例:

import java.util.HashSet;


HashSet<Integer> set = new HashSet<>();
set.add(1);   // 向集合中添加元素
set.add(2);
set.add(3);


boolean contains = set.contains(2);  // 檢查集合中是否包含某個(gè)元素
System.out.println(contains);  // 輸出結(jié)果:true


set.remove(3);  // 從集合中移除指定元素


for (Integer num : set) {
    System.out.println(num);
}

在上面的例子中,我們使用HashSet類來(lái)實(shí)現(xiàn)集合。我們添加了一些元素,檢查集合是否包含某個(gè)元素,并移除指定的元素。還展示了如何迭代集合中的元素并進(jìn)行輸出。

哈希表和集合是常用的數(shù)據(jù)結(jié)構(gòu),它們提供了高效的存儲(chǔ)和查找操作。通過(guò)使用哈希函數(shù)來(lái)計(jì)算鍵的散列值,它們能夠快速地定位和訪問元素。在實(shí)際編程中,你可以根據(jù)具體的需求選擇使用適當(dāng)?shù)墓1砘蚣蠈?shí)現(xiàn)類,并根據(jù)需要調(diào)用相應(yīng)的方法

7.樹(Tree)示例:

BinarySearchTree:
class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;




    public TreeNode(int val) {
        this.val = val;
        this.left = null;
        this.right = null;
    }
}




class BinarySearchTree {
    private TreeNode root;




    public void insert(int val) {
        root = insertNode(root, val);
    }




    private TreeNode insertNode(TreeNode node, int val) {
        if (node == null) {
            return new TreeNode(val);
        }




        if (val < node.val) {
            node.left = insertNode(node.left, val);
        } else if (val > node.val) {
            node.right = insertNode(node.right, val);
        }




        return node;
    }




    public boolean search(int val) {
        return searchNode(root, val);
    }




    private boolean searchNode(TreeNode node, int val) {
        if (node == null) {
            return false;
        }




        if (val == node.val) {
            return true;
        } else if (val < node.val) {
            return searchNode(node.left, val);
        } else {
            return searchNode(node.right, val);
        }
    }
}


BinarySearchTree bst = new BinarySearchTree();
bst.insert(5);
bst.insert(2);
bst.insert(8);
bst.insert(1);




System.out.println(bst.search(2)); // 輸出結(jié)果:true,搜索值為2的節(jié)點(diǎn)
System.out.println(bst.search(10)); // 輸出結(jié)果:false,搜索值為10的節(jié)點(diǎn)

8.圖(Graph)示例:

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;




class Graph {
    private int vertices; // 圖中的頂點(diǎn)數(shù)
    private List<List<Integer>> adjacencyList; // 鄰接表表示圖




    public Graph(int vertices) {
        this.vertices = vertices;
        adjacencyList = new ArrayList<>(vertices);
        for (int i = 0; i < vertices; i++) {
            adjacencyList.add(new ArrayList<>());
        }
    }




    public void addEdge(int source, int destination) {
        adjacencyList.get(source).add(destination);
        adjacencyList.get(destination).add(source);
    }




    public void breadthFirstSearch(int startVertex) {
        boolean[] visited = new boolean[vertices];
        Queue<Integer> queue = new LinkedList<>();




        visited[startVertex] = true;
        queue.offer(startVertex);




        while (!queue.isEmpty()) {
            int currentVertex = queue.poll();
            System.out.print(currentVertex + " ");




            List<Integer> neighbors = adjacencyList.get(currentVertex);
            for (int neighbor : neighbors) {
                if (!visited[neighbor]) {
                    visited[neighbor] = true;
                    queue.offer(neighbor);
                }
            }
        }
    }
}




Graph graph = new Graph(6);
graph.addEdge(0, 1);
graph.addEdge(0, 2);
graph.addEdge(1, 3);
graph.addEdge(2, 4);
graph.addEdge(3, 5);




graph.breadthFirstSearch(0); // 從頂點(diǎn)0開始進(jìn)行廣度優(yōu)先搜索

在上面的例子中,我們創(chuàng)建了一個(gè)簡(jiǎn)單的圖,并使用鄰接表來(lái)表示圖的結(jié)構(gòu)。然后,我們實(shí)現(xiàn)了廣度優(yōu)先搜索算法來(lái)遍歷圖中的頂點(diǎn)。

9.堆(Heap)示例:

import java.util.PriorityQueue;


PriorityQueue<Integer> minHeap = new PriorityQueue<>(); // 創(chuàng)建一個(gè)最小堆
minHeap.offer(5); // 向堆中添加元素
minHeap.offer(2);
minHeap.offer(8);
minHeap.offer(1);


int minElement = minHeap.peek(); // 獲取堆頂元素(最小值)
System.out.println(minElement); // 輸出結(jié)果:1


while (!minHeap.isEmpty()) {
    int currentElement = minHeap.poll(); // 彈出并移除堆頂元素
    System.out.println(currentElement);
}

10. 列表示例:

import java.util.ArrayList;


ArrayList<Integer> myList = new ArrayList<>();
myList.add(1);   // 在列表末尾添加元素
myList.add(2);
myList.add(3);


System.out.println(myList);   // 輸出結(jié)果:[1, 2, 3]


myList.remove(1);   // 移除指定索引位置的元素
System.out.println(myList);   // 輸出結(jié)果:[1, 3]


int element = myList.get(0);   // 獲取指定索引位置的元素
System.out.println(element);   // 輸出結(jié)果:1


for (int i = 0; i < myList.size(); i++) {   // 遍歷列表中的元素
    System.out.println(myList.get(i));
}

在上面的例子中,我們使用優(yōu)先隊(duì)列實(shí)現(xiàn)了一個(gè)最小堆。我們向堆中添加一些元素,然后通過(guò)peek()方法獲取最小的元素。最后,我們使用poll()方法逐個(gè)彈出并移除堆中的元素。

這些示例代碼展示了如何使一些常見數(shù)據(jù)結(jié)構(gòu)的基本用法。你可以根據(jù)實(shí)際需求對(duì)代碼進(jìn)行修改和擴(kuò)展。

責(zé)任編輯:華軒 來(lái)源: 微技術(shù)之家
相關(guān)推薦

2025-04-07 08:21:49

2010-01-12 11:37:06

Linux常見文件

2017-05-11 11:59:12

MySQL數(shù)據(jù)結(jié)構(gòu)算法原理

2019-08-13 09:40:55

數(shù)據(jù)結(jié)構(gòu)算法JavasCript

2016-09-30 14:23:16

數(shù)據(jù)結(jié)構(gòu)算法八大排序算法

2014-07-01 15:49:33

數(shù)據(jù)結(jié)構(gòu)

2012-05-16 17:05:33

Java數(shù)據(jù)結(jié)構(gòu)

2024-03-26 00:05:13

數(shù)據(jù)庫(kù)數(shù)據(jù)結(jié)構(gòu)

2011-07-11 16:05:42

MySQL索引

2023-05-03 22:09:02

Hive分區(qū)工具,

2009-06-30 16:03:00

異常Java

2020-08-03 07:48:15

Javascript數(shù)據(jù)結(jié)構(gòu)

2024-06-24 00:30:00

2011-07-04 10:32:37

JAVA

2017-09-06 10:55:19

Java

2022-03-11 07:37:39

hashCodeHashMap數(shù)據(jù)結(jié)構(gòu)

2020-09-18 09:13:46

數(shù)據(jù)結(jié)構(gòu)元素

2018-09-11 10:04:27

程序員面試數(shù)據(jù)結(jié)構(gòu)

2023-10-31 08:51:25

數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)數(shù)據(jù)

2015-04-08 10:27:43

JavaScript字符串操作函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)