Java 字符数组排序问题

1. import java.util.*;
2. publicclass Quest{
3. publicstatic void main(String[ ] args){
4. String[] colors =
5. {"blue","red","green","yellow","orange"};
6. Arrays.sort(colors);
7. ints2 = Arrays.binarySearch(colors, "orange");
8. ints3 = Arrays.binarySearch(colors, "violet");
9. System.out.print(s2+ "_" + s3);
10. }
11. }
麻烦能不能解释一下为什么最后输出结果为2-5啊,Arrays.sort是怎么把colors排序的?还有
ints2 = Arrays.binarySearch(colors, "orange");
ints3 = Arrays.binarySearch(colors, "violet");
这两句又是什么作用啊,本人小白麻烦解释一下吧谢谢

你好:
public static int binarySearch(Object[] a,
Object key)

使用二分搜索法来搜索指定数组,以获得指定对象。在进行此调用之前,必须根据元素的自然顺序对数组进行升序排序(通过 sort(Object[]) 方法)。如果没有对数组进行排序,则结果是不确定的。(如果数组包含不可相互比较的元素(例如,字符串和整数),则无法 根据其元素的自然顺序对数组进行排序,因此结果是不确定的。)如果数组包含多个等于指定对象的元素,则无法保证找到的是哪一个。
参数:
a - 要搜索的数组
key - 要搜索的值
返回:
如果它包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。插入点 被定义为将键插入数组的那一点:即第一个大于此键的元素索引,如果数组中的所有元素都小于指定的键,则为 a.length。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。
抛出:
ClassCastException - 如果搜索的键不能与数组的元素进行比较。

这是API,和你解释一下为什么输出-5,如果数组包含不可相互比较的元素(例如,字符串String和整数),则无法 根据其元素的自然顺序对数组进行排序,因此结果是不确定的。就是说对String数组使用这个方法,搜索的条件不在数组内时,结果是不确定的;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-01-06
binarySearch
public static int binarySearch(long[] a,
long key)

使用二分搜索法来搜索指定的 long 型数组,以获得指定的值。必须在进行此调用之前对数组进行排序(通过 sort(long[]) 方法)。如果没有对数组进行排序,则结果是不确定的。如果数组包含多个带有指定值的元素,则无法保证找到的是哪一个。

参数:
a - 要搜索的数组
key - 要搜索的值
返回:
如果它包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。 插入点 被定义为将键插入数组的那一点:即第一个大于此键的元素索引,如果数组中的所有元素都小于指定的键,则为 a.length。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。
我拷贝了一段API上来认真看你就会明白
应该调用参数是object的我觉得 但是原理是一样的看懂就明白了
第2个回答  推荐于2018-05-04
Arrays.sort 默认排序是 按照英文从小到大排序.

排完之后colors应该是 blue green orange red yellow
int s2 = Arrays.binarySearch(colors, "orange");

二分查找.. 返回 在colors中 orange的下标
当找不到要搜索的值时,返回 (-(插入点) - 1) ,
插入点可以理解为colors长度..本回答被提问者和网友采纳
第3个回答  2015-01-06
字母排列,书出 2是你找到的orange排列在第2位 (0开始算)
後面的 -5 是.......我也不知道反正就是超过长度了!!!!
相似回答