📜  Java数据结构-编程示例(1)

📅  最后修改于: 2023-12-03 15:16:35.797000             🧑  作者: Mango

Java数据结构-编程示例

本文将会介绍Java中常用的数据结构及其编程示例,包括数组、链表、栈、队列、哈希表、树和图,帮助程序员快速了解并学习。

数组

数组是Java中最基本的数据结构之一,是一组连续的内存空间,每个元素占用相同的存储空间,在内存中地址连续排列。

示例

声明一个整型数组并初始化:

int[] arr = {1, 2, 3, 4, 5};

输出数组中的第一个元素:

System.out.println(arr[0]);
链表

链表是由一组节点组成的集合,每个节点都包含数据和指向下一个节点的指针,节点不必在内存中连续放置。

示例

声明一个单向链表并添加节点:

class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
node1.next = node2;
node2.next = node3;

遍历链表并输出:

ListNode head = node1;
while (head != null) {
    System.out.println(head.val);
    head = head.next;
}
栈和队列

栈和队列都是一种受限的线性结构,栈只允许在一端进行插入和删除操作,是一种后进先出(LIFO)的数据结构;队列允许在一端进行插入,在另一端进行删除,是一种先进先出(FIFO)的数据结构。

示例

声明一个栈并进行操作:

Stack<Integer> stack = new Stack<>();
stack.push(1); // 入栈
stack.push(2);
stack.push(3);
System.out.println(stack.peek()); // 获取栈顶元素
System.out.println(stack.pop()); // 弹出栈顶元素
System.out.println(stack.pop());
System.out.println(stack.pop());

声明一个队列并进行操作:

Queue<Integer> queue = new LinkedList<>();
queue.offer(1); // 入队
queue.offer(2);
queue.offer(3);
System.out.println(queue.peek()); // 获取队头元素
System.out.println(queue.poll()); // 弹出队头元素
System.out.println(queue.poll());
System.out.println(queue.poll());
哈希表

哈希表是一种用于存储键值对的数据结构,通过哈希函数将键映射到存储桶中,实现对键值对的快速查找和插入。

示例

声明一个哈希表并进行操作:

Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("cherry", 3);
System.out.println(map.get("apple")); // 获取键为"apple"的值
System.out.println(map.containsKey("banana")); // 判断是否包含键"banana"
map.remove("cherry"); // 删除键为"cherry"的元素

树是一种非线性的数据结构,由一组节点和边组成,节点之间存在层次关系。二叉树是树的一种特殊形式,每个节点最多只有两个子节点。

示例

声明一个二叉树并进行操作:

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}

TreeNode root = new TreeNode(1);
TreeNode node1 = new TreeNode(2);
TreeNode node2 = new TreeNode(3);
root.left = node1;
root.right = node2;

对二叉树进行先序遍历:

void preOrder(TreeNode root) {
    if (root != null) {
        System.out.println(root.val);
        preOrder(root.left);
        preOrder(root.right);
    }
}

preOrder(root);

图是一种非线性的数据结构,由一组节点和边组成,节点之间存在连接关系,可以用来表示各种实际问题的关系。

示例

声明一个图并进行操作:

class Graph {
    int V;
    List<Integer>[] adj;

    Graph(int V) {
        this.V = V;
        adj = new List[V];
        for (int i = 0; i < V; i++) {
            adj[i] = new ArrayList<>();
        }
    }

    void addEdge(int v, int w) {
        adj[v].add(w);
        adj[w].add(v);
    }
}

Graph g = new Graph(4);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 3);

for (int v = 0; v < g.V; v++) {
    System.out.println(v + ": " + g.adj[v]);
}

以上就是Java常用数据结构及其编程示例的介绍,希望能帮助程序员们更好地理解和应用这些重要的数据结构。