1、String,StringBuilder,StringBuffer的区别?
String是不可变类,如果直接重新赋值,会创建新的对象,耗资源
StringBuilder是可变类,重新赋值不会创建新的对象,线程是不安全的,单线程时使用,速度较StringBuffer更快。JDK1.5后才有
StringBuffer,支持多线程,是线程安全的,会有一个初始容量,当字符串小于初始容量时,不会改变,只有超过初始容量时,会对这个容量进行扩大。
2、List,Set,Map的特点,有哪些实现类,数据结构是什么?
List: 继承Collection的接口,有序队列,可以存放重复的元素,每一个元素都有一个索引值,从0开始;主要的实现类有:ArrayList,LinkedList,Vector,Stack
Set:继承Collection的接口,不保证存取的顺序,不能存放重复的元素;主要的实现类:HashSet,TreeSet,LinkedHashSet
Map:由键值对组成的集合,Key到Value的映射,不能有重复的Key,不同的Key可以有相同的Value;主要的实现类有:HashMap,HashTable,TreeMap
3、synchronized修饰的静态方法,锁住的是什么,synchronized修饰的成员方法,锁住的是什么?
静态方法:锁住的是类,
成员方法:锁住的是对象,
4、说说throws,throw,try,catch,finally的作用了解
try:用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。
catch:用于捕获异常。catch用来捕获try语句块中发生的异常。
finally:finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。
throw:用于抛出异常。
throws:用在方法签名中,用于声明该方法可能抛出的异常。
try块中可以抛出异常。
5、编写一个方法,入参为一个有序的List<Integer>,输出为有序的List< Integer>,操作为将传进来的List中重复的Integer去掉。还要写出测试用例来测试方法的健壮性。
eg:输入[0,1,1,2,3] 输出[,0,1,2,3]
public List<Integer> distinct(List<Integer> list){
List<Integer> newList = new ArrayList<Integer>();
//利用双重循环,遍历加比较
for (int i=0;i<list.size();i++){
//先将第一个加进来
newList.add(list.get(i));
for (int j=i+1;j<list.size();j++){
//当相邻两个值相同时候,i++,是为了让外层循环跳过这个相同的值,这样就可以避免加入两个一样的值
if (list.get(i) == list.get(j)){
i++;
}
}
}
return newList;
}
6、编写一个方法,入参为一个字符串和一个正整数,要求:
- 当字符串长度比正整数大时,需要将前面多出的字符删掉,输入 “abcd” 2 输出 “cd”
- 当字符串长度比正整数小时,在前面补空格到正整数一样长,输入"abcd" 5 输出" abcd"
- 当字符串为null或者"",直接输出跟正整数一样多的空格,输入 “” 1 ,输出" "
public StringBuilder s(String s,Integer len){
//创建一个StringBuilder对象来存放要返回的字符串
StringBuilder newString = new StringBuilder();
//当入参的字符串为""或者是null时候,新的字符串需要加入正整数个空格
if ("".equals(s) || s == null){
for (int i=0;i<len;i++){
newString.append(" ");
}
}else if (s.length() > len){
//当入参的字符串长度大于正整数,要从头开始减去len-s.length()的数,使用delete方法来删除
newString.append(s);
newString.delete(0,s.length()-len);
} else if (s.length() < len){
//当入参的字符串长度小于正整数,要从头开始加入s.length()-len的空格,使用insert方法来从头开始加入空格
newString.append(s);
for (int i=0;i<len-s.length();i++){
newString.insert(0," ");
}
}
return newString;
}