scjp考试准备 - 3

判断如下程序的最终输出值:

import java.util.*;
public class Quest{
    public static void main(String[] args){
       String[] colors = {"blue", "red", "green", "yellow", "orange"};
       Arrays.sort(colors);
       int s2 = Arrays.binarySearch(colors, "orange");
       int s3 = Arrays.binarySearch(colors, "violet");

       System.out.println(s2 + "" + s3);
    }
}

这道题考察的是对数组操作工具类Arrays的掌握。

翻了下文档,Arrays有以下方法:

  1. asList(T... a) :返回一个受指定数组支持的固定大小的列表。与之对应的是Collection.toArray()方法。(注意这里的参数不是数组)
  2. binarySearch(type[] a, type key):使用二分法搜索数组a,以获取指定值key在数组中的位置。如果key在数组a中存在,则返回key在a中的索引;如果key在数组a中不存在,那么返回的值为(key插入数组a后的索引+1)*-1
  3. copyOf(type[] original, int newLength) :从索引0开始复制指定长度的数组,不足用 0或者null 填充
  4. copyOfRange(type[] original, int from, int to) :将指定数组的指定范围复制到一个新数组,不足用0或着null填充
  5. deepEquals(Object[] a1, Object[] a2) :如果两个指定数组彼此是深层相等 的,则返回 true。与 equals(Object[],Object[]) 方法不同,此方法适用于任意深度的嵌套数组。
  6. deepHashCode(Object[] a) :基于指定数组的“深层内容”返回哈希码。如果数组包含作为元素的其他数组,则哈希码将基于其内容,并以此类推,直至无穷。对于任何两个满足 Arrays.deepEquals(a, b) 的数组 ab,也可以说 Arrays.deepHashCode(a) == Arrays.deepHashCode(b)
  7. deepToString(Object[] a) :返回指定数组“深层内容”的字符串表示形式。如果数组包含作为元素的其他数组,则字符串表示形式包含其内容等。此方法是为了将多维数组转换为字符串而设计的。
  8. static boolean equals(type[] a, type[] a2) :如果两个指定的 数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的
  9. fill(type[] a, type val) :将指定类型的值val,分配给相同类型的的数组a中的每个元素
  10. hashCode(type[] a):基于数组的内容返回哈希码
  11. sort(type[] a):按照自然顺序对数组进行排序
  12. sort(T[] a, Comparator<? super T> c) 根据指定比较器产生的顺序对指定对象数组进行排序
  13. toString(boolean[] a) :返回指定数组内容的字符串表示形式

再简单说一下,上面提到的相等包括==或equals两种判定的结果;deep开头的方法主要用于嵌套数组。

 

这道题中先使用Arrays.sort()方法对数组进行排序,而后在进行查找。排序后,按自然顺序,“orange”会置于第三位,索引为2。“violet”在数组中不存在,插入数组后则会置于第五位,索引为4。那么这道题的返回值就是(2) + “” + ((4+1)*-1 )即“2-5” 。

 

不妨试试不进行sort(),直接查找看看返回什么结果。对原程序稍作修改:

import java.util.*;
public class Quest{
    public static void main(String[] args){
       String[] colors = {"blue", "red", "green", "yellow", "orange"};
       //Arrays.sort(colors);
       int s2 = Arrays.binarySearch(colors, "violet");
       int s3 = Arrays.binarySearch(colors, "blue");
       int s4 = Arrays.binarySearch(colors, "red");
       int s5 = Arrays.binarySearch(colors, "green");
       int s6 = Arrays.binarySearch(colors, "orange");
       int s7 = Arrays.binarySearch(colors, "yellow");
       int s8 = Arrays.binarySearch(colors, "dark");

       System.out.println(s2 + "," + s3 + "," + s4 + "," + s5 + "," + s6 + "," + s7 + "," + s8 );
    }
}

 

输出结果是:

如果按顺序来判断的话,这里有一个意外“red”。但根据二分查找的原理就好解释了:Java使用二分法在数组中查找指定的元素,此时Java认为数组是已经排序好了的,如果在查找的过程中发现了一个适合这个元素的位置那么就会停止查找,返回这个位置对应的值。

胡言乱语,仅作测试,不要较真。

scjp考试准备 - 3,布布扣,bubuko.com

时间: 2024-12-09 12:03:38

scjp考试准备 - 3的相关文章

scjp考试准备 - 4

好吧这道题我丢脸了,竟然做错了. 如下程序的输出结果是: class Alligator{ public static void main(String[] args){ int[]x[] = {{1,2},{3,4,5},{6,7,8,9}}; int[][]y = x; System.out.print(y[2][1]); } }   最后输出7. 我是从1开始数的. scjp考试准备 - 4,布布扣,bubuko.com

scjp考试准备 - 5

如下代码,在所指示的位置插入代码能够正常编译: class Alpha{ public void bar(int... x){}; public void bar(int x){}; } public class Beta extends Alpha{ //insert code here } 有如下选项: A: private void bar(int x){} B: public void bar(int x){} C: public int bar(String x){return 1;}

scjp考试准备 - 2

判断如下代码的执行结果: public class Spock{ public static void main(String[] args){ Long tail = 2000L; Long distance = 1999L; Long story = 1000L; if( (tail>distance) ^ ((story*2)==tail ) ) System.out.print("1"); if((distance+1 !=tail) ^ ((story*2)==dist

scjp考试准备 - 1

判断如下代码最后的执行结果. public class Breaker{ static String o = ""; public static void main(String[] args){ z: o = o+2; for(int x=3; x<8; x++){ if(x==4) break; if(x==6) break z; o = o+x; } System.out.print(o); } } 这道题考察的重点是Java的循环控制.主要考察break语句及循环标签.

scjp考试准备 - 6

  题一,如下代码的执行结果: class Person{ String name = "No name"; public Person(String nm){name = nm;} } class Employee extends Person{ String empID = "0000"; public Employee(String id){empID = id;} } class EmployeeTest{ public static void main(S

scjp考试准备 - 10

题目为如下代码的执行结果: class Building{} public class Barn extends Building{ public static void main(String[] args){ Building build1 = new Building(); Barn barn1 = new Barn(); Barn barn2 = (Barn)build1; Object obj1 = (Object)build1; String str1 = (String)build

scjp考试准备 - 9

题目为如下代码的执行结果: abstract class Vehicle{ public int speed(){ return 0; } } class Car extends Vehicle{ public int speed(){ return 60; } } class RacerCar extends Car{ public int speed(){ return 150; } public void run(){ System.out.println("I'm running...&

scjp考试准备 - 8

题目,如下代码的执行结果: import java.util.ArrayList; class Pizza{ ArrayList toppings; public final void addTopping(String topping){ toppings.add(topping); } public void removeTopping(String topping){ toppings.remove(topping); } } class PepperoniPizza extends Pi

scjp考试准备 - 11

题目如下: interface Foo{} class Alpha implements Foo{} class Beta extends Alpha{} public class Delta extends Beta{ public static void main(String[] args){ Beta x = new Beta(); //insert code here } } 将下面哪一行代码插入如上所示的位置中会导致java.lang.ClassCastException: A. A