Java笔试_1

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、编写一个方法,入参为一个字符串和一个正整数,要求:

  1. 当字符串长度比正整数大时,需要将前面多出的字符删掉,输入 “abcd” 2 输出 “cd”
  2. 当字符串长度比正整数小时,在前面补空格到正整数一样长,输入"abcd" 5 输出" abcd"
  3. 当字符串为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;
	}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值