データ構造
TreeSetで特定の値より大きい最初の要素を検索
TreeSet<Integer> treeSet = new TreeSet<>();
Integer targetValue = treeSet.higher(searchKey);
2次元配列の降順ソート
Arrays.sort(2dArray, (first, second) -> (second[0] - first[0]));
最小ヒープの実装
PriorityQueue<int[]> minHeap = new PriorityQueue<>((arr1, arr2) -> arr1[0] - arr2[0]);
文字列と文字配列の相互変換
char[] charArray = inputString.toCharArray();
Arrays.sort(charArray);
String sortedString = new String(charArray);
双方向キューの操作
Deque<Integer> doubleEndedQueue = new LinkedList<>();
doubleEndedQueue.peekLast();
doubleEndedQueue.pollLast();
doubleEndedQueue.peekFirst();
doubleEndedQueue.pollFirst();
doubleEndedQueue.offerFirst();
doubleEndedQueue.offerLast();
カスタムソートを持つ優先度付きキュー
最初の要素で降順、同じ場合は2番目の要素で降順
ラムダ式での実装
PriorityQueue<int[]> customPriorityQueue = new PriorityQueue<>((arr1, arr2) -> {
if (arr1[0] != arr2[0]) {
return arr2[0] - arr1[0];
} else {
return arr2[1] - arr1[1];
}
});
PriorityQueue<int[]> customPriorityQueue2 = new PriorityQueue<>(new Comparator<int[]>() {
@Override
public int compare(int[] first, int[] second) {
return first[0] != second[0] ? second[0] - first[0] : second[1] - first[1];
}
});
マップの反復処理
Iterator<Map.Entry<Character, Integer>> iterator = charCountMap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<Character, Integer> entry = iterator.next();
Character key = entry.getKey();
Integer value = entry.getValue();
}
反復を使った中間順走査
List<Integer> result = new ArrayList<>();
Deque<TreeNode> stack = new LinkedList<>();
TreeNode currentNode = root;
while (currentNode != null || !stack.isEmpty()) {
while (currentNode != null) {
stack.push(currentNode);
currentNode = currentNode.left;
}
currentNode = stack.pop();
result.add(currentNode.value);
currentNode = currentNode.right;
}
return result;
Javaの参照渡しの動作
class Solution {
List<List<Integer>> result = new ArrayList<>();
boolean[] visited = new boolean[25];
public List<List<Integer>> subsets(int[] nums) {
List<Integer> tempList = new ArrayList<>();
findAllSubsets(nums, tempList, 0);
return result;
}
private void findAllSubsets(int[] nums, List<Integer> tempList, int index) {
if (index == nums.length) {
result.add(new ArrayList<>(tempList));
return;
}
tempList.add(nums[index]);
findAllSubsets(nums, tempList, index + 1);
tempList.remove(tempList.size() - 1);
findAllSubsets(nums, tempList, index + 1);
}
}