【发布时间】:2013-02-02 11:03:21
【问题描述】:
我目前正在为一个java 专家简介写一个面试问题。这里是:
考虑到这段代码:
清单 1
package com.example;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Searching {
public static void main(String[] args) {
int input = Integer.valueOf(args[0]);
String[] strings = {"1", "2", "4", "8", "16", "32", "64", "128"};
List<Integer> integers = new ArrayList<Integer>();
for (String s : strings) {
integers.add(Integer.valueOf(s));
}
System.out.println("index of "+input+" is:"+Collections.binarySearch(integers, input, cmp));
}
static Comparator<Integer> cmp = new Comparator<Integer>() {
public int compare(Integer i, Integer j) {
return i < j ? -1 : (i == j ? 0 : 1);
}
};
}
然后用这个 cmd 行编译这段代码
清单 2
javac com/example/Searching.java
并使用此命令行运行
清单 3
java com/example/Searching 128
问题 A:
执行清单 3 产生:
index of 128 is:-8
你能解释一下这个输出吗?
问题 B:
考虑到这一点
java com/example/Searching 32
输出是
index of 32 is:5
你能解释一下这个输出吗?
问题 C:
假设您有一个 JRE 1.6、一个 shell 和一个文本编辑器。您将如何更改清单 1 和/或清单 2 和/或清单 3 以产生此输出:
index of 128 is:7
备注:改的越少越好。
我的问题是:
- 您会如何回答这些问题?
- 如何改进?
【问题讨论】:
-
我觉得你对“专家”的门槛很低
-
不确定...你的答案是什么?
-
@Esilija 这是-8。这意味着找不到该值,并且(如果它在那里)它将位于第 7 位。未找到该值,因为它正在将 Integer 与 ==(而不是等于)进行比较。找到
32是因为 Java 有一个“有趣”的特性,它可以缓存所有表示 -128 和 127 之间值的 Integer(因此所有持有32的 Integer 对象都是同一个对象)。 -
@Flexo,我想你不知道 SJuan76 写了什么:)
-
@emka86 - 我不认为自己是 Java 专家(和 yes, I am familiar with autoboxing),但我也不认为记住 API 参考资料是专家的标志。跨度>
标签: java