我在使用Java写算法题或者日常使用的时候总是感觉自己会遗忘很多方法,每次都要重新去问,所以想写一个日常学习Java时的一些知识杂记,为了抗自己遗忘的,并做好分类供以后快速查阅。

函数\方法使用

字符串相关


问:为什么string或者sb不带这些方法,为什么要调用parseInt这个静态方法,这都是怎么设计的,我小白跟本理解不了,或者说记不住,为什么有时候使用对象的方法,有时候使用类的静态方法?

答:String的本质就是一堆字符,是一个字符数组。它本身并不知道这些字符到底是不是数字,还是什么莫名其妙的东西,所以不可以往这里添加类似于toInt()这种函数,所以这个方法就可以设置在对应的数字类中当静态方法调用。想变成 int,就找 Integer。字符串自己相关的事,才找 String。拼接修改字符串,才找 StringBuilder。

字符串变成数字的方法一般都是数字类型.parse**();


字符串没有添加、删除的方法,这些是可变字符串StringBuffer\Builder的功能.

字符串常用的方法就是replace(),substring(),lenght(),charAt()这些了

判断两个字符串是否相等使用str.equals()

可变字符串等使用delete(),append(),insert(),这些方法。


List和Set之间互相转换:

实际开发里最常见的是这几个:

// List -> Set,普通去重 Set<String> set = new HashSet<>(list);
// List -> Set,去重并保留顺序 Set<String> set = new LinkedHashSet<>(list);
// Set -> List List<String> list = new ArrayList<>(set);

其实就是在创建set/list的时候填入对应的参数,调用构造方法。

但要注意可能会乱序,保证顺序需要用LinkedHashSet。


Arrays 是 java.util.Arrays 这个工具类,常用操作:

Arrays.toString //转字符串,打印用
Arrays.sort // 排序,可以定义规则
Arrays.binarySearch //二分查找,前提有序
Arrays.copyOf //复制数组
Arrays.copyOfRange //复制数字,带范围
Arrays.fill //填充数组
Arrays.equals //判断数组是否相等
Arrays.asList //转变成List集合
Arrays.stream //stream流

char[[]][[][]二维数组怎么变List<>?

一、通过stream流:

List<String> list = Arrays.toStream(chars)
.map(String:new)
.collect(Collectors.toList());

二、通过增强for循环:

for(char[] c : chars){
list.add(c);
}

三、通过下标常规循环:

for(int i=0;i<n;i++){
//这里的char[i]可以代表第i行的char[]数组,
list.add(char[i]);
}

其实这里的第三个才是最基础的,因为有char[i]可以代表第i行的char[]数组这个条件,所以才可以通过增强for循环依次取出一行,以及通过stream流来依次处理。