平时刷题都是拿C/C++的,现在记录一下使用java刷题需要记住的常用集合类以及函数。
java中的集合类放在java.util包下,所有的集合类主要是从Collection和Map这两个接口派生出来的,所有集合都是List、Queue、Set、Map这四个接口的实现类。
Collection接口的常用通用方法:
List<String> tmp = new ArrayList<>();
String ans = tmp.toArray(new String[tmp.size()])
List<String[]> arr= new ArrayList<>();
String[][] ans = arr.toArray(new String[arr.size()][])
List中除了Collection接口中的额外方法:
ArrayList<Integer> list = new ArrayList<Integer>();
LinkedList<String> link = new LinkedList<String>();
LinkedList 特有方法(擅长首尾操作):
Queu中除了Collection接口中的额外方法:
双端队列,可模拟栈
Deque<Integer> dq = new LinkedList<Integer>();//频繁的插入、删除操作的时候使用
Deque<Integer> dq = new ArrayDeque<Integer>();//频繁的随机访问操作使用,不支持null
作为栈时的函数:
PriorityQueue<Integer> pq = new PriorityQueue<Integer>();//小顶堆,默认容量是11
PriorityQueue<Integer> pq = new PriorityQueue<Integer>(11,new Comparator<Integer>(){
public int compare(Integer a,Integer b){
return b - a;
}
});//大顶堆,比较函数可通过定义类、匿名类或者Lambda表达式实现
Set<String> set = new HashSet<>();
Set<String> set = new TreeSet<>();
floor(E e) :方法返回在这个集合中小于或者等于给定元素的最大元素,如果不存在这样的元素,返回null.
ceiling(E e): 方法返回在这个集合中大于或者等于给定元素的最小元素,如果不存在这样的元素,返回null.
常用方法:
HashMap<Integer, Integer> mp=new HashMap<>();
mp.put(1, 2);
Set<Integer> set=mp.keySet();
Iterator<Integer> iterator=set.iterator();
while(iterator.hasNext()) {
int idd=iterator.next();
int val=mp.get(idd);
}
Set<Map.Entry<Integer,Integer> entries = map.entrySet();//建议使用此种遍历
for(Map.Entry<Integer,Integer> entry:entries ){
int id = entry.getKey();
int val = entry.getValue();
}
TreeMap:
TreeMap
ceilingKey(K key):返回大于或等于给定键的最小键,如果没有这样的键,则null
floorKey(K key):返回小于或等于给定键的最大键,如果没有这样的键,则null
String 中的常用函数
StringBuffer s1=new StringBuffer();
ArrayList<Integer>arrayList = new ArrayList<Integer>();
Collections.reverse(arrayList);//反转
Collections.shuffle(arrayList);//随机排序
Collections.swap(arrayList,1,3);//交换位置
Collections.sort(arrayList, new Comparator<Integer>() {
public int compare(Integer integer, Integer t1) {
return t1.compareTo(integer);
}
});//定制排序,由Comparator控制排序逻辑
Collections.max(arrayList)//最大值
Collections.frequency(arrayList,1);//统计1出现的次数
Collections.binarySearch(arrayList,1);//二分查找、返回索引
int a[] = {100, 2, 3, 4, 5, 6, 7, 8, 9, 11};
Arrays.sort(a);//排序
Arrays.binarySearch(e, 4);//二分查找,如果数组中存在该元素,则会返回该元素在数组中的下标,如果不存在,返回 -(插入点 + 1)
List<String> stooges = Arrays.asList("Larry", "Moe", "Curly"); //转成链表
import java.util.*;
public class Main{
public static void main(String[] Args){
Scanner in = new Scanner(System.in);
int num = in.nextInt();
while(in.hasNext()){
int a = in.nextInt();
int b = in.nextInt();
System.out.println(a+b);
}
}
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = in.nextInt();//第一行读取一个数字,表示数组长度
in.nextLine();//数字和字符串,需要吸收掉最后的换行
String[] strs = new String[n];
for(int i=0;i<n;i++){
strs[i] = in.next();
}
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNextLine()){
String str = in.nextLine();//直接读取一行
String[] arr = str.split(" ");//分隔符分开
Arrays.sort(arr);
}
}