文章目錄
- Java語言Leetcode中常用的一些基礎語法
- 棧與隊列
- 棧
- 隊列
- 類型轉換
- 字符串與字符數組的轉換
- 數組與 List 的轉換
- 排序
- 使用 Collections.sort()
- 使用 List.sort()
- 自定義對象排序
Java語言Leetcode中常用的一些基礎語法
棧與隊列
棧
在Java中,棧通常可以通過 java.util.Stack 類來實現。Stack 類繼承自 Vector 類,提供了棧特有的操作方法。
棧是一種 后進先出(LIFO, Last In, First Out)結構。棧中的元素按順序排列,最后加入的元素最先被移除。棧的典型操作包括:
- push:將元素推入棧頂。
- pop:移除棧頂元素。
- peek:查看棧頂元素,但不移除它。
- isEmpty:檢查棧是否為空。
隊列
在Java中,隊列是通過 java.util.Queue 接口定義的,并有多個實現類。常見的實現類有:
- LinkedList:最常用的隊列實現之一,它實現了 Queue 接口,因此提供了隊列操作方法。
- PriorityQueue:一種基于優先級堆實現的隊列,其中的元素是按自然順序排序或由提供的比較器進行排序的。
常見的隊列操作有:
offer(E e):將元素插入隊列末尾。如果隊列能夠接受此元素,則返回 true,否則返回 false。
poll():移除并返回隊列頭部的元素。如果隊列為空,則返回 null。
peek():返回隊列頭部的元素但不移除它。如果隊列為空,則返回 null。
isEmpty():檢查隊列是否為空。
size():返回隊列中的元素個數。
在Java中,優先級隊列(PriorityQueue)是基于優先級堆實現的隊列,元素按照自然順序或自定義的比較器排序。默認情況下,PriorityQueue 會使用元素的 自然排序(即實現了 Comparable 接口的對象)。但是,如果你需要自定義排序規則,可以通過傳入一個比較器(Comparator)來控制元素的順序。
import java.util.PriorityQueue;
import java.util.Comparator;class Student {String name;int score;Student(String name, int score) {this.name = name;this.score = score;}@Overridepublic String toString() {return name + ": " + score;}
}public class PriorityQueueWithComparator {public static void main(String[] args) {// 自定義一個Comparator,按學生的分數降序排序Comparator<Student> byScoreDescending = new Comparator<Student>() {@Overridepublic int compare(Student s1, Student s2) {return Integer.compare(s2.score, s1.score); // 分數高的優先}};// 創建優先級隊列,并傳入自定義的比較器PriorityQueue<Student> queue = new PriorityQueue<>(byScoreDescending);// 向隊列中添加學生queue.add(new Student("Alice", 90));queue.add(new Student("Bob", 85));queue.add(new Student("Charlie", 95));// 打印隊列中的學生while (!queue.isEmpty()) {System.out.println(queue.poll()); // 按照分數從高到低打印學生}}
}
在Java中,雙端隊列(Deque, Double-Ended Queue)是一種隊列,它允許從兩端插入和移除元素。Deque 接口繼承自 Queue 接口,并提供了更多的操作方法,使得可以從隊列的兩端進行元素的添加和刪除。
Deque 接口
Deque 接口定義了雙端隊列的基本操作,包括:
- addFirst(E e):將元素添加到隊列的頭部。
- addLast(E e):將元素添加到隊列的尾部。
- removeFirst():移除并返回隊列頭部的元素。
- removeLast():移除并返回隊列尾部的元素。
- getFirst():獲取隊列頭部的元素,但不移除它。
- getLast():獲取隊列尾部的元素,但不移除它。
- offerFirst(E e):將元素插入隊列頭部,如果隊列沒有容量,則返回 false。
- offerLast(E e):將元素插入隊列尾部,如果隊列沒有容量,則返回 false。
- pollFirst():移除并返回隊列頭部的元素,如果隊列為空,返回 null。
- pollLast():移除并返回隊列尾部的元素,如果隊列為空,返回 null。
類型轉換
字符串與字符數組的轉換
-
字符串轉字符數組
可以通過 String 的 toCharArray() 方法將字符串轉換為字符數組。String str = "hello"; char[] charArray = str.toCharArray();
-
字符數組轉字符串
可以通過 String 構造函數將字符數組轉換為字符串。char[] charArray = {'h', 'e', 'l', 'l', 'o'}; String str = new String(charArray);
數組與 List 的轉換
-
數組轉 List
可以使用 Arrays.asList() 方法將數組轉換為 List。但是要注意,使用 Arrays.asList() 返回的 List 是固定大小的,不支持增加或刪除元素。String[] array = {"apple", "banana", "cherry"}; List<String> list = Arrays.asList(array);
對于基本類型數組(如 int[]),需要轉換為對應的包裝類類型(如 Integer[]):
int[] arr = {1, 2, 3, 4}; List<Integer> list = Arrays.stream(arr) // 將int[]轉為Stream.boxed() // 轉換為Stream<Integer>.collect(Collectors.toList());
-
List 轉數組:
不管是List轉數組還是數組轉list都可以用for循環賦值實現。
排序
在 Java 中,排序列表(List)通常通過 Collections.sort() 或 List.sort() 方法實現。
使用 Collections.sort()
Collections.sort() 方法是 Java 中最常用的排序方法之一。它按照元素的自然順序對列表進行排序。該方法是基于歸并排序(MergeSort)實現的,因此具有 O(n log n) 的時間復雜度。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class SortListExample {public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(5);list.add(2);list.add(8);list.add(1);// 排序列表Collections.sort(list);// 打印排序后的列表System.out.println(list); // 輸出: [1, 2, 5, 8]}
}
使用 List.sort()
List.sort() 是 Java 8 引入的另一種排序方法,它是 List 接口的方法,接受一個 Comparator。它可以用于自定義排序規則。
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;public class ListSortExample {public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(5);list.add(2);list.add(8);list.add(1);// 使用 List.sort() 和自定義比較器進行排序list.sort(Comparator.reverseOrder()); // 按降序排序// 打印排序后的列表System.out.println(list); // 輸出: [8, 5, 2, 1]}
}
自定義對象排序
對于自定義對象(如類的實例),可以通過實現 Comparable 接口來定義排序規則,或者通過傳遞自定義的 Comparator 對象來控制排序
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;class Person implements Comparable<Person> {String name;int age;Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic int compareTo(Person other) {return Integer.compare(this.age, other.age); // 按年齡升序排序}@Overridepublic String toString() {return name + ": " + age;}
}public class PersonSortExample {public static void main(String[] args) {List<Person> list = new ArrayList<>();list.add(new Person("Alice", 30));list.add(new Person("Bob", 25));list.add(new Person("Charlie", 35));// 使用 Collections.sort() 按年齡排序Collections.sort(list);// 打印排序后的列表System.out.println(list); // 輸出: [Bob: 25, Alice: 30, Charlie: 35]}
}