欢迎访问宙启技术站
智能推送

Java中常见的数据结构及相关函数的使用方法

发布时间:2023-06-24 17:54:08

Java中常见的数据结构有数组、链表、栈、队列、堆、树、图等等。下面简要介绍这些数据结构及相关函数的使用方法。

1. 数组(Array)

数组是一种最基本的数据结构,它是由相同类型的元素组成,使用下标进行访问和操作。Java语言中,数组的声明和初始化如下:

int[] arr = new int[10];  // 创建一个长度为10的int类型数组

int[] brr = {1, 2, 3, 4}; // 直接初始化一个长度为4的int类型数组

数组的一些常用操作:

// 遍历数组

for (int i = 0; i < arr.length; i++) {

    System.out.println(arr[i]);

}

// 计算数组元素之和

int sum = 0;

for (int i = 0; i < arr.length; i++) {

    sum += arr[i];

}

// 查找指定元素的下标

int index = -1;

for (int i = 0; i < arr.length; i++) {

    if (arr[i] == target) {

        index = i;

        break;

    }

}

2. 链表(Linked List)

链表是由节点组成的线性结构,每个节点包含一个数据元素和指向下一个节点的指针。Java中提供了链表的实现类LinkedList,它支持队列、栈和双向链表等操作。链表的一些常用操作:

// 创建链表

LinkedList<Integer> list = new LinkedList<Integer>();

// 添加元素

list.add(1);

list.addLast(2);

list.addFirst(3);

// 获取元素

int first = list.getFirst();

int last = list.getLast();

int index = list.indexOf(2);

// 删除元素

list.remove(1);

list.removeFirst();

list.removeLast();

// 插入元素

list.add(1, 4);

3. 栈(Stack)

栈是一种后进先出(LIFO)的数据结构,它只允许在一端进行插入和删除操作。Java中提供了栈的实现类Stack,它支持压栈、出栈、查看栈顶元素等操作。

// 创建栈

Stack<Integer> stack = new Stack<>();

// 入栈

stack.push(1);

stack.push(2);

stack.push(3);

// 出栈

int top = stack.pop();

int peek = stack.peek(); // 查看栈顶元素

// 判断栈是否为空

boolean empty = stack.empty();

4. 队列(Queue)

队列是一种先进先出(FIFO)的数据结构,它支持在队尾插入元素,在队头删除元素。Java中提供了队列的实现类LinkedList,它支持添加、删除、查看队头队尾元素等操作。

// 创建队列

LinkedList<Integer> queue = new LinkedList<>();

// 入队

queue.offer(1);

queue.offer(2);

queue.offer(3);

// 出队

int poll = queue.poll();

int peek = queue.peek(); // 查看队头元素

// 判断队列是否为空

boolean empty = queue.isEmpty();

5. 堆(Heap)

堆是一种特殊的树形数据结构,父节点的值总是大于(或小于)其子节点的值。Java中提供了堆的实现类PriorityQueue,它支持插入、删除、查看堆顶元素等操作。

// 创建最大堆

PriorityQueue<Integer> maxHeap = new PriorityQueue<>((a, b) -> b - a);

// 创建最小堆

PriorityQueue<Integer> minHeap = new PriorityQueue<>();

// 插入元素

maxHeap.offer(1);

maxHeap.offer(2);

maxHeap.offer(3);

// 删除堆顶元素

int max = maxHeap.poll();

int min = minHeap.poll();

// 查看堆顶元素

int peek = maxHeap.peek();

6. 树(Tree)

树是一种非线性数据结构,它由一组节点构成,节点之间存在一定的关系,形成了层次结构。Java中常见的树结构有二叉树、红黑树、AVL树等。树的一些常用操作有遍历、搜索、增删改查等。

// 创建二叉树

class TreeNode {

    int val;

    TreeNode left;

    TreeNode right;

    TreeNode(int x) { val = x; }

}

public TreeNode createTree() {

    // 创建一颗如下的二叉树

    //      1

    //     / \

    //    2   3

    //   / \

    //  4   5

    TreeNode root = new TreeNode(1);

    root.left = new TreeNode(2);

    root.right = new TreeNode(3);

    root.left.left = new TreeNode(4);

    root.left.right = new TreeNode(5);

    return root;

}

// 前序遍历

public void preOrder(TreeNode root) {

    if (root == null) return;

    System.out.print(root.val + " ");

    preOrder(root.left);

    preOrder(root.right);

}

// 中序遍历

public void inOrder(TreeNode root) {

    if (root == null) return;

    inOrder(root.left);

    System.out.print(root.val + " ");

    inOrder(root.right);

}

// 后序遍历

public void postOrder(TreeNode root) {

    if (root == null) return;

    postOrder(root.left);

    postOrder(root.right);

    System.out.print(root.val + " ");

}

// 层次遍历

public void levelOrder(TreeNode root) {

    if (root == null) return;

    Queue<TreeNode> queue = new LinkedList<>();

    queue.offer(root);

    while (!queue.isEmpty()) {

        TreeNode node = queue.poll();

        System.out.print(node.val + " ");

        if (node.left != null) queue.offer(node.left);

        if (node.right != null) queue.offer(node.right);

    }

}

7. 图(Graph)

图是一种非线性数据结构,由一组节点和一组边组成,节点之间和边之间存在一定的关系。Java中常见的图结构有有向图、无向图、加权图等。图的一些常用操作有遍历、搜索、增删改查等。

// 创建无向图

class Graph {

    private int V;          // 图中节点的个数

    private ArrayList<Integer>[] adj;  // 邻接表表示图

    public Graph(int v) {

        this.V = v;

        adj = new ArrayList[v];

        for (int i = 0; i < v; i++) {

            adj[i] = new ArrayList<>();

        }

    }

    // 添加边

    public void addEdge(int u, int v) {

        adj[u].add(v);

        adj[v].add(u);

    }

}

// DFS遍历

public void dfs(int s, boolean[] visited) {

    visited[s] = true;

    System.out.print(s + " ");

    for (int v : adj[s]) {

        if (!visited[v]) {

            dfs(v, visited);

        }

    }

}

// BFS遍历

public void bfs(int s, boolean[] visited) {

    Queue<Integer> queue = new LinkedList<>();

    visited[s] = true;

    queue.offer(s);

    while (!queue.isEmpty()) {

        int u = queue.poll();

        System.out.print(u + " ");

        for (int v : adj[u]) {

            if (!visited[v]) {

                visited[v] = true;

                queue.offer(v);

            }

        }

    }

}

以上是Java中常见的数据结构及相关函数的使用方法,各个数据结构在实际应用中都有广泛的应用。学好数据结构和算法是成为一名优秀的程序员的必要条件之一。