scjp考试准备 - 3 - 关于Arrays
判断如下程序的最终输出值:
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有以下方法:
- asList(T... a) :返回一个受指定数组支持的固定大小的列表。与之对应的是Collection.toArray()方法。(注意这里的参数不是数组)
- binarySearch(type[] a, type key):使用二分法搜索数组a,以获取指定值key在数组中的位置。如果key在数组a中存在,则返回key在a中的索引;如果key在数组a中不存在,那么返回的值为(key插入数组a后的索引+1)*-1
- copyOf(type[] original, int newLength) :从索引0开始复制指定长度的数组,不足用 0或者null 填充
- copyOfRange(type[] original, int from, int to) :将指定数组的指定范围复制到一个新数组,不足用0或着null填充
- deepEquals(Object[] a1, Object[] a2) :如果两个指定数组彼此是深层相等 的,则返回 true。与
equals(Object[],Object[])方法不同,此方法适用于任意深度的嵌套数组。 - deepHashCode(Object[] a) :基于指定数组的“深层内容”返回哈希码。如果数组包含作为元素的其他数组,则哈希码将基于其内容,并以此类推,直至无穷。对于任何两个满足 Arrays.deepEquals(a, b) 的数组 a 和 b,也可以说 Arrays.deepHashCode(a) == Arrays.deepHashCode(b)。
- deepToString(Object[] a) :返回指定数组“深层内容”的字符串表示形式。如果数组包含作为元素的其他数组,则字符串表示形式包含其内容等。此方法是为了将多维数组转换为字符串而设计的。
- static boolean equals(type[] a, type[] a2) :如果两个指定的 数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的
- fill(type[] a, type val) :将指定类型的值val,分配给相同类型的的数组a中的每个元素
- hashCode(type[] a):基于数组的内容返回哈希码
- sort(type[] a):按照自然顺序对数组进行排序
- sort(T[] a, Comparator<? super T> c) 根据指定比较器产生的顺序对指定对象数组进行排序
- 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 - 关于Arrays的更多相关文章
- scjp考试准备 - 10 - 类型转换
题目为如下代码的执行结果: class Building{} public class Barn extends Building{ public static void main(String[] ...
- scjp考试准备 - 7 - Java构造器
题目——如下代码的执行结果: class Hello{ String title; int value; public Hello(){ title += " World!"; } ...
- scjp考试准备 - 6 - 父类构造器的引用
题一,如下代码的执行结果: class Person{ String name = "No name"; public Person(String nm){name = nm;} ...
- scjp考试准备 - 5 - 重载和重写
如下代码,在所指示的位置插入代码能够正常编译: class Alpha{ public void bar(int... x){}; public void bar(int x){}; } public ...
- scjp考试准备 - 4 - 关于数组
好吧这道题我丢脸了,竟然做错了. 如下程序的输出结果是: class Alligator{ public static void main(String[] args){ int[]x[] = {{1 ...
- scjp考试准备 - 2 - 逻辑运算及类型转换
判断如下代码的执行结果: public class Spock{ public static void main(String[] args){ Long tail = 2000L; Long dis ...
- scjp考试准备 - 1 - 循环控制
判断如下代码最后的执行结果. public class Breaker{ static String o = ""; public static void main(String[ ...
- scjp考试准备 - 11 - 类型转换2
题目如下: interface Foo{} class Alpha implements Foo{} class Beta extends Alpha{} public class Delta ext ...
- scjp考试准备 - 9 - 多态
题目为如下代码的执行结果: abstract class Vehicle{ public int speed(){ return 0; } } class Car extends Vehicle{ p ...
随机推荐
- lib制作
生成模拟器和真机通用lib命令: lipo -create libKIF-os.a libKIF-simulator.a -output libKIF.a. 需要cd到 愿文件.a所在的目录. li ...
- javascript代码复用(四)-混入、借用方法和绑定
这篇继续说js的现代复用模式:混入.借用方法和绑定. 混入 可以针对前面提到的通过属性复制实现代码复用的想法进行一个扩展,就是混入(mix-in).混入并不是复制一个完整的对象,而是从多个对象中复制出 ...
- phongap+ jquery + asp.net +android,我把我遇到的问题和处理方法的连接总结一下
这些都是最基本的问题,在实际的运用中都会用到 第1章.搭建Android的开发环境-跟我学编程 Win7旗舰版中的IIS配置asp.net的运行环境 - 追夢 - 博客园 vs2012下asp.net ...
- rsync 实现实时增量备份
Rsync + Crontab实现定时文件同步(首次全量+后续增量) 2015-04-14 19:02:11 标签:增量更新 rsync crontab 原创作品,允许转载,转载时请务必以超链接形式标 ...
- 八、Linux下的网络服务器模型
服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器,按处理方式来分有循环服务器和并发服务器. 在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务端的程序就提 ...
- 如何利用CSS代码使图片和文字在同一行显示且对齐
对于初学css的新手朋友来说,经常会遇到这样一个问题,当文字和图片出现在同一行或者同一个div里面的时候,在浏览器中运行出来的显示效果往往是在不同的行,那么,我们怎么才能利用CSS代码使图片和文字在同 ...
- PHP中的Array
PHP中的数组是一个有序映射(1对1的关系 key->value).Array是一个综合体:可表示数组.字典.集合等. key可以是int或string.value可以是任意类型. key如下情 ...
- mysql 5.7压缩包安装笔记
转载请注明出处http://www.cnblogs.com/havedream/p/5075263.html 重装系统之后准备安装mysql,看到官网上有mysql 5.7.10可以下载就点了,然后就 ...
- CentOS用户权限管理--su与sudo
Linux权限管理--su与sudo 1.su用来切换登录的用户,比如当前用户为chen,可以用su zhu,并输入用户zhu的登录密码,就可以切换到用户zhu.如果一个普通用户想切换到root用户, ...
- PHP上传图片如何防止图片木马?
segmentfault回答: http://segmentfault.com/q/1010000000507750 一. 其实识别图片木马是很困难的,可以在一张正常的图片里加入一句话木马. 但是只要 ...