sort:
1:java.util.Arrays中的静态方法Arrays.sort()方法,针对基本数据类型和引用对象类型的数组元素排序
2:java.util.Collections中的静态方法的Collections.sort()方法,针对集合框架中的动态数组,链表,树,哈希表等( ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap )进行排序。下面分别介绍两种用法。
Collections.sort(list,new Comparator<Integer>(){//升序排序
public int compare(Integer str1,Integer str2){
String s1=str1+""+str2;
String s2=str2+""+str1;
return s1.compareTo(s2);//变成-s1.compareTo(s2)就是降序排序了
}
});
reverse:
对于集合,使用Collections.reverse()
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Collections.reverse(list);
对于字符串,使用StringBuilder.reverse()
String str = "Hello, World!";
StringBuilder reversedStr = new StringBuilder(str).reverse();
ArrayList:
对应于C++的vector容器
#等价于vector<int>vec[maxn]
private final int maxn=(int)2e5+5
ArrayList<Integer>list=new ArrayList[maxn]
将元素插入到指定位置的 arraylist 中
public boolean add(E e)
从集合中获取元素,参数是索引编号,返回值就是对应位置的元素
public E get(int index)
从集合中删除元素,参数是索引编号,返回值就是被删除的元素
public E remove(int index)
获取集合的尺寸长度,返回值是集合中包含的元素个数
public int size()
Stack和Queue容器:
Stack:
import java.util.Stack;
public class StackExample {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
// 添加元素
stack.push(1);
// 查看栈顶元素
int top = stack.peek();
// 移除栈顶元素
int popped = stack.pop();
}
}
Stack
的基本操作:
push(E item)
:将元素压入栈顶。pop()
:移除并返回栈顶元素。peek()
:返回栈顶元素,但不移除。isEmpty()
:检查栈是否为空。
Queue:Queue在Java中是一个接口,它的实现类有PriorityQueue和LinkedList,LinkedList即为C++种的Queue
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>();
// 添加元素
queue.add(1);
// 查看队首元素
int front = queue.peek();
// 移除队首元素
int removed = queue.poll();
// 检查队列是否为空
boolean isEmpty = queue.isEmpty();
}
}
Queue
的基本操作:
add(E e)
:将元素添加到队列尾部。poll()
:移除并返回队首元素,如果队列为空则返回null
。peek()
:返回队首元素,但不移除,如果队列为空则返回null
。isEmpty()
:检查队列是否为空。
TreeSet容器:
TreeSet即对应C++中的set:
Integer[]nums={1,2,3,4,5};
ArrayList<Integer>list=new ArrayList<>(List.of(nums));
Collections.addAll(list,4,5,6);
TreeSet<Integer> s = new TreeSet<>(list);
// 遍历集合中的所有元素
Iterator<Integer> it = s.iterator();
while (it.hasNext()) {
Integer element = it.next();
if (it.hasNext()) {
System.out.print(element + " ");
} else {
System.out.print(element);
}
}
contains(Object o)
:检查集合中是否包含指定元素。first()
和last()
:获取集合中的第一个和最后一个元素。ceiling(E e)
和floor(E e)
:分别返回大于或等于给定元素的最小元素和小于或等于给定元素的最大元素。higher(E e)
和lower(E e)
:分别返回严格大于和严格小于给定元素的最小和最大元素。
boolean remove(Object o)
:从集合中删除指定的元素o
,如果删除成功则返回true
。
Multiset容器:
Java中没有直接与C++的Multiset对应的容器,不过可以用TreeMap模拟实现,以leetcode该题为例 480. 滑动窗口中位数
class Solution {
public double[] medianSlidingWindow(int[] nums, int k) {
int n = nums.length;
double[] ans = new double[n-k+1];
Set<int[]> set = new TreeSet<>((a, b)->a[0]==b[0] ? Integer.compare(a[1], b[1]) : Integer.compare(a[0], b[0]));
for(int i=0; i<k; i++) set.add(new int[]{nums[i], i});
for(int i=k, j=0; i<n; i++, j++){
ans[j] = findMid(set);
set.add(new int[]{nums[i], i});
set.remove(new int[]{nums[i-k], i-k});
}
ans[n-k] = findMid(set);
return ans;
}
double findMid(Set<int[]> set){
int mid = (set.size() - 1) / 2;
var it = set.iterator();
while(mid-->0) it.next();
return set.size()%2 == 0 ? ((double)it.next()[0] + it.next()[0]) / 2 : it.next()[0];
}
}
TreeMap:
等价于C++的map
HashMap:
等价于c++的unordered_map