TreeSet<String> set = new TreeSet<>();
set.add("1");
set.add("1-1");
set.add("1-2");
set.add("1-2-2");
set.add("1-10-1");
set.add("1-2-3");
set.add("3-2");
set.add("3-1");
set.add("1-1-2");
set.add("2-1");
set.add("2");
set.add("3");
set.add("2-1-1");
set.add("2-2");
System.out.println(set);
结果为:[1, 1-1, 1-1-2, 1-10-1, 1-2, 1-2-2, 1-2-3, 2, 2-1, 2-1-1, 2-2, 3, 3-1, 3-2]
那种好的写法可以将结果输出为:[1, 1-1, 1-1-2, 1-2, 1-2-2, 1-2-3, 1-10-1, 2, 2-1, 2-1-1, 2-2, 3, 3-1, 3-2]
可就是将 1-10-1 改变至 1-2-3 的后面?
public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
1、首先你的容器的泛型是String,而且容器是TreeSet,他有序的容器。
2、既然泛型是String,那么在调用add方法的时候会调用String.class的compareTo方法,即上面的代码。
3、重点在int lim = Math.min(len1, len2);这段代码,1-1的长度是3,1-10-1的长度是6,取最小值是3.接下来while会比较3次。
4、看上图,循环到红线的地方就结束了。即没法比较1-1和1-10-1的顺序了。
不知道你看懂了没。