java数组面试题_JAVA面试题-数组字符串基础

1、大写的Integer和String是可变类还是不可变类?怎么定义不可变类?

不可变.

用final关键字,如

public final class Integer extends Number

2、比较字符串中的compareTo() 方法是什么原理?

返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方。

如果参数字符串等于此字符串,则返回值 0;

如果此字符串小于字符串参数,则返回一个小于 0 的值;

如果此字符串大于字符串参数,则返回一个大于 0 的值。

3、如何查找字符串最后一次出现的位置?

strOrig.lastIndexOf(String name)

4、请一行代码将字符串反转。

String reverse = new StringBuffer(string).reverse().toString();

new StringBuilder(string).reverse().toString();

5、说一下实现字符串分割的3种以上的办法

1、使用split方法;

2、使用遍历组装数组;

3、使用StringTokenizer ,如:

String str = "a,b,c";

StringTokenizer st=new StringTokenizer(str,",");while(st.hasMoreTokens()) {

System.out.println(st.nextToken());

}

6、如果设计一个两个字符串同长度一段区域的比较的函数,你会怎么设计方法的参数?

没有固定答案,仅考查基础逻辑。

public boolean regionMatches(boolean ignoreCase, inttoffset,

String other,int ooffset, intlen) {char ta[] =value;int to =toffset;char pa[] =other.value;int po =ooffset;//Note: toffset, ooffset, or len might be near -1>>>1.

if ((ooffset < 0) || (toffset < 0)|| (toffset > (long)value.length -len)|| (ooffset > (long)other.value.length -len)) {return false;

}while (len-- > 0) {char c1 = ta[to++];char c2 = pa[po++];if (c1 ==c2) {continue;

}if(ignoreCase) {//If characters don't match but case may be ignored,//try converting both characters to uppercase.//If the results match, then the comparison scan should//continue.

char u1 =Character.toUpperCase(c1);char u2 =Character.toUpperCase(c2);if (u1 ==u2) {continue;

}//Unfortunately, conversion to uppercase does not work properly//for the Georgian alphabet, which has strange rules about case//conversion. So we need to make one last check before//exiting.

if (Character.toLowerCase(u1) ==Character.toLowerCase(u2)) {continue;

}

}return false;

}return true;

}

6、为什么StringBuffer连接字符串在大量的修改情况下比用String的“+”要效率高?

老的不能再老的考题了。

String类对象不可改变的。字符串常量池可以将一些字符常量放在常量池中重复使用,避免每次都重新创建相同的对象、节省存储空间。但如果字符串是可变的,此时相同内容的String还指向常量池的同一个内存空间,当某个变量改变了该内存的值时,其他遍历的值也会发生改变。

String的“+”不断的新建对象(由不可变性决定了),而StringBuffer在一个对象上进行修改。

7、Collections类中的集合最小值函数min(Collection extends T> coll)内部实现原理是什么?

采用了泛型类实现Comparable接口,并且将集合通过迭代器iterator遍历得出最小值。

8、下面数组:int[] my_array = {1, 2, 5, 5, 6, 6, 7, 2, 9, 2};

请使用1次循环,找出重复的元素(即2、5、6)

分析,一般找重复元素需要2次循环,如下:

public static void findDupicateInArray2(int[] a) {int count=0;for(int j=0;j

count++;

}

}if(count==1)

System.out.println("重复元素 : " +a[j] );

count= 0;

}

}

实际上,因为数组的数量和最大值很小,所以可以用桶排序的思路来做1次循环,如下

public static void findDupicateInArray1(int[] a) {int max = 9;//本题中最大的元素是9

int[] bucket = new int[max + 1];for(int j=0;j

if(j>0 && bucket[a[j]]!=0)

System.out.println("重复元素 : " +a[j] );

bucket[a[j]]= a[j]; //将数值放入桶数组的下标

}

}

9、你来设计一个两个数组的并集函数,应该如何设计?

分析,应注意重复值的排除,使用set的特性。例子:

// 求两个字符串数组的并集,利用set的元素唯一性

public staticString[] union(String[] arr1, String[] arr2) {

Set set = new HashSet();for(String str : arr1) {

set.add(str);

}for(String str : arr2) {

set.add(str);

}

String[] result={ };returnset.toArray(result);

}

10、写一个斐波那契数列函数

分析,运用递归。

斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368……

特别指出:第0项是0,第1项是第一个1。

这个数列从第三项开始,每一项都等于前两项之和。

public static long fibonacci(longnumber) {if ((number == 0) || (number == 1))returnnumber;else

return fibonacci(number - 1) + fibonacci(number - 2);

}

11、cron表达式“0 10 10 ? * 6L”是什么意思?

每月的最后一个星期五上午10:10触发,注意 第6位的星期几是从周日开始,1-7,1代表周日,2代表周一,6代表周五,7代表周六

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值