Java常用資料結構和用法集合

主要是蒐集寫Leetcode或是日常開發的時候使用的資料結構,以及其用法,免得每次都要google,然後永遠搞不清楚到底要用add還是append

ArrayList

import java.util.ArrayList; // import the ArrayList class

ArrayList<String> cars = new ArrayList<String>(); // Create an ArrayList object

// 加東西
cars.add("Volvo");
cars.add("BMW");

// 取東西,使用index
cars.get(0);

// 修改特定element
cars.set(0, "Opel");

// 移除項目
cars.remove(0);

// 清空全部項目
cars.clear();

// 大小
cars.size();

// 疊代方式
for (String car : cars) {
  System.out.println(car);
}

LinkedList

// 定義
LinkedList<String> cars = new LinkedList<String>();

// 加東西
cars.add("Volvo");
cars.add("BMW");

此外

addLast()將一個項目添加到鏈表的末尾。這將使得列表末端新增一個新項目,擴展了列表的大小。

removeFirst()會從鏈表的開頭刪除一個項目。這將導致列表中的第一個項目被移除。

removeLast()會從鏈表的末尾刪除一個項目。這將導致列表中的最後一個項目被移除。

getFirst()用於獲取鏈表的開頭項目。這允許你檢索列表中的第一個項目。

getLast()用於獲取鏈表的末尾項目。這允許你檢索列表中的最後一個項目。

HashMap

import java.util.HashMap; // import the HashMap class

HashMap<String, String> capitalCities = new HashMap<String, String>();

// Add keys and values (Country, City)
capitalCities.put("England", "London");
capitalCities.put("Germany", "Berlin");

// 取得某key的值
capitalCities.get("England");

// 移除某Key的值
capitalCities.remove("England");

// 清除全部對
capitalCities.clear();

// 大小
capitalCities.size();

// 印出鍵(Key)
for (String i : capitalCities.keySet()) {
  System.out.println(i);
}

// 印出值(Values)
for (String i : capitalCities.values()) {
  System.out.println(i);
}

HashSet

import java.util.HashSet; // Import the HashSet class

HashSet<String> cars = new HashSet<String>();

// 加東西
cars.add("Volvo");
cars.add("BMW");

// 檢查是否在set裡了
cars.contains("Mazda");

// 移除物品
cars.remove("Volvo");

// 清除全部物品
cars.clear();

// 大小
cars.size();

// 疊代方式
for (String i : cars) {
  System.out.println(i);
}

Queue

// 定義(注意是LinkedList實作)
Queue<String> queue = new LinkedList<>();

// 加東西
queue.add("one");
queue.add("two");
// 或(有細微差別)
queue.offer("three");

// 移除東西
queue.remove("three");
// 或(有細微差別)
queue.poll();

// 看一下head是什麼
queue.element();
// 或
queue.peek();

// 清除全部物品
queue.clear();

// 把Elements加入Queue
String nums[] = {"one","two","three","four","five"};
Collections.addAll(queue, nums);

// 轉換為陣列
String strArray[] = queue.toArray(new String[queue.size()]);

PriorityQueue

// Creating empty priority queue
PriorityQueue<Integer> pQueue = new PriorityQueue<Integer>();

// 加入
pQueue.add(10);
pQueue.add(20);
pQueue.add(15);

// 取得最上層物件並移除
pQueue.poll();

// 看一下最上層物件
pQueue.peek();

// 使用comparator的方式
// 比較map的值,從小到大
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Comparator.comparingInt(map::get));
// 或是使用lambda
PriorityQueue<Integer> pq = new PriorityQueue<Integer>(
    (a, b) -> map.get(a) - map.get(b)
);
// Add elements to the priority queue
pq.addAll(map.keySet());

// 從大到小
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Comparator.comparingInt(map::get).reversed());
// 或
PriorityQueue<Integer> pq = new PriorityQueue<Integer>(
    (a, b) -> map.get(b) - map.get(a)
);
// 或
PriorityQueue<Integer> pQueue = new PriorityQueue<Integer>(
  Collections.reverseOrder()
  );

Stack

Stack

// 實例化
Stack<String> animals= new Stack<>();

// 加入stack
animals.push("Dog");

// 移除最頂層(並回傳)
String element = animals.pop();

// 取得最上層的東西
String element = animals.peek();

// 查詢某項在stack的什麼位置
int position = animals.search("Horse");

// 是否為空
boolean result = animals.empty();

Sort

Deep Dive: Java 2d Array Sort


// sort(array, comparator)
// 從小排到大lexicographically
Arrays.sort(numString, new Comparator<String>() {
    @Override
    public int compare(String i, String j) {
        String s1 = i+j;
        String s2 = j+i;
        return s1.compareTo(s2);
    }
});

// sort 2d陣列,二維陣列

// Sort by the first element
int[][] intervals = {{1, 2}, {2, 3}, {3, 4}, {1, 3}};
Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));

// Sorting 2d array based on 1st column in descending order
Arrays.sort(intervals, (a, b) -> Integer.compare(b[0], a[0]));

其他操作

// Sort List
Collections.sort(cars);

Java常用資料結構和用法集合
https://f88083.github.io/2023/12/30/Java常用資料結構和用法集合/
作者
Simon Lai
發布於
2023年12月30日
許可協議