泛型Generic的概念。
使用了方括号<>的,就是泛型。泛型里面必须是一个object,不能是基础数据类型如int,double.
object的例子如自定义的一个class,Integer, Double等。
Integer: 是一个class,是一个object,可以等于null。而int不能为null。例如int a = null会报错,而Integer b = null 不报错。
Double同理,Double是object,而double是java的八大primitive data type之一,不能为null。
当使用了Comparator<>, 方括号里面必须是object,用Integer正确,用int错误。而且下面这一题中,用了comparator导致传入参数也要是Integer[] 而不是 int[].
public String output(Integer[] arr) {
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer a, Integer b) {
if(a.equals(b)) {
return 0;
}
String s1 = a + "" + b;
String s2 = b + "" + a;
int first = Integer.parseInt(s1);
int second = Integer.parseInt(s2);
return second - first;
}
});
StringBuilder sb = new StringBuilder();
for(Integer i : arr) {
sb.append(i);
}
return sb.toString();
}
面试题:给一个List<Long>和Long target,求list的subsequence(非连续子数列),让subsequence的sum<=target, 返回最大的sum。
用recursive来写。
public long max = Long.MIN_VALUE;
public long maxSum(List<Long> list, Long target){
if(list==null || list.size()==0) return 0;
helper(list,target,0,0);
return max;
}
public void helper(List<Long> list, Long target, long sum, int cur){
if(sum>max && sum<=target) max=sum;
if(sum > target || cur>=list.size()) return;
helper(list,target,sum,cur+1);
helper(list,target,sum+list.get(cur),cur+1);
}
网友评论