1.TreeSet
import java.util.*;
public class huawei {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
//即可以空格分割,也可以换行分割
int num = sc.nextInt();
//有序无重复的集合,在要求输出不重复且从大到小排列时可以使用
TreeSet<Integer> set = new TreeSet<Integer>();
for(int i = 0 ; i < num ;i++){
int curr = sc.nextInt();
set.add(curr);
}
for(Integer i : set){
System.out.println(i);
}
}
}
}
2.substring
按下标切割数组,split按特定字符切割字符串成字符串数组。
s1=s2.substring(0,8);
s2=s2.substring(8); //8到字符串结尾
3. 字符串类型转化为整形
String str="16";
Integer.parseInt(str);
String str="A";
Integer.parseInt(str,16);//把16进制表示的A转化为10进制,结果为10
4.替换字符串的某些字符
String newStr=str.replace(" ","%20");//replace可以替换字符,或者其中的部分字符串
//而且替换后的字符串是一个新的字符串,旧字符串的值没有变化
5.char[] 型转化为string
不能用ch.toString(),显示的不是字符串本身,用下面的
new String(ch)
6.list.remove();
ArrayList<Integer> temp=new ArrayList<>(list);
res.add(temp); //直接把list加入另一个lists里面,再改变list里面的值,lists里面的值也会改变
//remove()这个方法是一个重载方法,即remove(int position)和remove(object object),唯一的区别是参数类型。要密切注意自己调用的remove()方法中的,传入的是int类型还是一个对象。
//使用remove(int position)的方法时,要先从大到小的位置移除,否则下标变化之后下面一次移除可能会数组越界。当然如果你知道具体的对象,直接移除remove(对象)更稳妥。
list.remove(new Integer(l));
ArrayList的remove方法是重载函数,需要注意
PriorityQueue的remove直接删除值很ok
PriorityQueue<Integer> window = new PriorityQueue<>();
window.add(3);
window.remove(3);
7.类作为参数传入方法
java中都是值传递,类传入的时候传入的是这个类的一个地址副本,指向原来的类,使用地址副本改变地址里面的内容的操作会影响原来的类,如果对地址副本赋上new的对象的新地址,则不会对原来的对象造成影响。
private TreeNode ret;
private int cnt = 0;
//第一种可以正常运行
private void inOrder(TreeNode root, int k) {
if (root == null || cnt >= k)
return;
inOrder(root.left, k);
cnt++;
if (cnt == k)
ret = root; //需要改变类的指向,就不要用参数传进来,而是全局变量
inOrder(root.right, k);
}
8. PriorityQueue排序问题
priorityqueue遍历输出顺序不是排好顺序的,因为他插入的时候就不是完全排序,只保证了最顶端的值是最小的。
PriorityQueue<Integer> priorityQueue =new PriorityQueue<>();
priorityQueue.add(1);
priorityQueue.add(3);
priorityQueue.add(2);
for (int i:priorityQueue){
System.out.println(i);
}
输出:132
9. 将一个有向图的二维数组变为邻接链表数组
int prerequisites[][]={{0,1},{0,3},{0,2},{1,4},{2,4},{3,4}};
List<Integer>[] list = new List[numCourses];
for (int i = 0; i < numCourses; i++) {
list[i] = new ArrayList<>();
}
for (int[] a : prerequisites) {
list[a[0]].add(a[1]);
}