21xrx.com
2024-11-25 03:12:11 Monday
登录
文章检索 我的文章 写文章
Java面试必问技术栈——掌握常见数据结构和算法
2023-06-14 13:48:16 深夜i     --     --
Java开发 数据结构 排序算法 回溯算法

在Java开发中,拥有一定的数据结构和算法基础是非常必要的。因此,在Java面试中,常常会被问到与数据结构和算法相关的问题。下面,我们来学习一些常见的数据结构和算法,为Java面试做好准备。

1. 常见数据结构

1.1 数组

数组是一种非常基础的数据结构,是一系列同类型的元素构成的集合。在Java中,可以使用以下方式来定义数组:


// 定义整型数组

int[] arr = 2;

// 遍历数组

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

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

}

1.2 栈

栈是一种先进后出的数据结构,常用于编译器中的表达式求值、括号匹配等问题。在Java中,可以使用以下方式来实现栈:


import java.util.Stack;

public class Main {

  public static void main(String[] args) {

    Stack stack = new Stack ();

    stack.push(1);

    stack.push(2);

    stack.push(3);

    System.out.println(stack.pop());

    System.out.println(stack.pop());

    System.out.println(stack.pop());

  }

}

1.3 队列

队列是一种先进先出的数据结构,常用于生产者消费者模式等问题。在Java中,可以使用以下方式来实现队列:


import java.util.LinkedList;

import java.util.Queue;

public class Main {

  public static void main(String[] args) {

    Queue queue = new LinkedList ();

    queue.offer(1);

    queue.offer(2);

    System.out.println(queue.poll());

    System.out.println(queue.poll());

  }

}

2. 常见算法

2.1 排序算法

排序算法是非常基础、常见的算法,常见的排序算法有冒泡排序、插入排序、选择排序、快速排序、归并排序等。以下是快速排序的实现:


public class QuickSort {

  public static void quickSort(int[] arr, int left, int right) {

    if (left >= right)

      return;

    int i = left, j = right;

    int pivot = arr[left];

    while (i < j) {

      while (i < j && arr[j] >= pivot)

        j--;

      arr[i] = arr[j];

      while (i < j && arr[i] <= pivot)

        i++;

      arr[j] = arr[i];

    }

    arr[i] = pivot;

    quickSort(arr, left, i - 1);

    quickSort(arr, i + 1, right);

  }

}

2.2 回溯算法

回溯算法常用于求解有多个解的问题,如全排列、N皇后等。以下是求解N皇后问题的实现:


public class Queen {

  private int[] cols;

  private int ways;

  public int placeQueens(int n) {

    if (n < 1)

      return 0;

    cols = new int[n];

    ways = 0;

    place(0);

    return ways;

  }

  private void place(int row) {

    if (row == cols.length) {

      ways++;

      return;

    }

    for (int col = 0; col < cols.length; col++) {

      if (isValid(row, col)) {

        cols[row] = col;

        place(row + 1);

      }

    }

  }

  private boolean isValid(int row, int col) {

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

      if (cols[i] == col)

        return false;

      if (row - i == Math.abs(col - cols[i]))

        return false;

    }

    return true;

  }

}

3. 关键词

Java开发、数据结构、排序算法、回溯算法

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复