Windows 10家庭中文版,java version "1.8.0_152",Eclipse Oxygen.1a Release (4.7.1a),

参考链接:http://www.runoob.com/java/arrays-search.html

本文是在 抄写 了参考链接中的程序后,发现了一些自己之前不晓得的 基础知识 而写。

原文提供了 int[]数组 的排序(java.util.Arrays类的sort函数)(默认顺序——升序),排序后,使用java.util.Arrays类的binarySearch查找数组中 已存在的元素,并得到其位置。

本来自己是想添加 倒序排序 的功能,可是,Arrays类提供的函数中,没有方法对 int[]数组 进行排序,之前知道的sort函数可以有第二个参数——Comparator参数,可是,此参数仅支持引用类型,而int并非应用类型。无法对 int[]数组 进行倒序排序,那么,就对 Integer[]数组 进行倒序排序。

对 int[]数组 怎么进行倒序排序呢?目前的想法:自己写算法实现,或者,使用Arrays.sort排序后,再使用循环颠倒排序元素。

下面的代码是第一次实现 Integer[]数组 倒序排序的代码:用到了 java.util.Comparator、匿名内部类,,稍候会对其进行改进。

 import java.util.Arrays;
import java.util.Comparator; public class SortArray { public static void main(String[] args) throws Exception {
int array[] = {2, 5, -2, 6, -3, 8, 0, -7, -9, 4};
Arrays.sort(array); printArray("数组排序结果为:", array);
int index = Arrays.binarySearch(array, 2);
System.out.print("元素2在第 " + index + " 个位置"); // 倒序排列
Integer[] array2 = {2, 5, -2, 6, -3, 8, 0, -7, -9, 4};
16 Arrays.sort(array2, new Comparator() {
17
18 @Override
19 public int compare(Object o1, Object o2) {
20 Integer e1 = (Integer)o1;
21 Integer e2 = (Integer)o2;
22
23 return e1 > e2?-1:1;
24 }
25
26 });
printArray2("数组排序结果为:", array2);
} /**
* 打印int型数组
* @param message
* @param array
*/
private static void printArray(String message, int[] array) {
System.out.println(message + ": [length = " + array.length + "]");
for (int i = 0; i < array.length; i++) {
if (i != 0) {
System.out.print(", ");
}
System.out.print(array[i]);
}
System.out.println();
} /**
* 打印Integer型数组
* @param message
* @param array
*/
private static void printArray2(String message, Integer[] array) {
System.out.println(message + ": [length = " + array.length + "]");
for (int i = 0; i < array.length; i++) {
if (i != 0) {
System.out.print(", ");
}
System.out.print(array[i]);
}
System.out.println();
}
}

下图是上面16~26行代码截图:

可以看出,上面的代码存在警告信息,如下:

Multiple markers at this line
- Comparator is a raw type. References to generic type Comparator<T> should be parameterized
- Type safety: The expression of type new Comparator(){} needs unchecked conversion to conform to Comparator<?
super Integer>
- Type safety: Unchecked invocation sort(Integer[], new Comparator(){}) of the generic method sort(T[], Comparator<?
super T>) of type Arrays

泛型相关的错误。Comparator接口是一个泛型接口,在使用它的时候,需要指明类型T。虽然编译、运行成功了,但是,还可以更进一步。

下面是修改后的代码:创建匿名内部类时指定具体类型为Integer。

Arrays.sort(array2, new Comparator<Integer>() {

    @Override
public int compare(Integer o1, Integer o2) {
return o1 > o2?-1:1;
} });

注意上面代码的红色部分。现在, 没有强制类型转换了,可以直接比较o1、o2,因为它们的类型就是Integer。

完了吗?没有。还可以改造。更简洁。

Comparator是一个函数式接口(Functional Interface),因此,可以使用lambda表达式进一步简化(需要Java 8支持)。

改造后的代码如下:

 Arrays.sort(array2, (o1, o2) -> o1 > o2?-1:1);

wow!一行代码就搞定了!的确很简洁啊!

以上所有代码的输出结果如下:

数组排序结果为:: [length = 10]
-9, -7, -3, -2, 0, 2, 4, 5, 6, 8
元素2在第 5 个位置数组排序结果为:: [length = 10]
8, 6, 5, 4, 2, 0, -2, -3, -7, -9

后记

还找Java开发呢,先好好练练基础吧!刚刚居然还在lambda表达式里面添加 return,真是笑死自己了!

写篇博文,让自己记得更牢固一些,而且可以探索更多内容——写博文之前没想过用lambda的,现在用了,满足了。

最新文章

  1. 数据库 数据库SQL语句一
  2. linux中不小心将rpm命令卸载了,怎么恢复?
  3. linux命令学习(一)—— 文件和目录管理命令
  4. 【BZOJ】4636: 蒟蒻的数列
  5. Jira中Activity Stream中显示Localhost不能正常访问的处理
  6. Tomcat启动过程(一):从BootStrap到EndPonit
  7. 关于 VS2012 创建 MVC4 Empty 项目的一个小问题
  8. 正确设置网站title、keywords、description(转载)
  9. HTML5 总结-应用程序缓存-8
  10. Windows Phone 8初学者开发—第1部分:系列介绍
  11. Mac下一个svn提交.a文件
  12. 机器人操作系统 除了Android还有一个ROS(转)
  13. 201521123073 《Java程序设计》第14周学习总结
  14. JAVA课程设计 刘舒婷 201521123096
  15. dotnet core cli 命令
  16. angularjs 学习小结
  17. [转]ArrayList的实现原理
  18. JAVA框架 Spring 事务
  19. 【转】PHP笔试题2010年
  20. 【总结】牛客职播第十期:程盟有你,way来可期

热门文章

  1. 【洛谷P4180】严格次小生成树
  2. 【LOJ#6281】数列分块5
  3. [Offer收割]编程练习赛13 解题报告
  4. Ubuntu下安装nfs服务器
  5. 在Vue中如何使用axios跨域访问数据
  6. ( 大数 startsWith substring) Exponentiation hdu1063
  7. md5加密解密版本2
  8. 条理清晰的搭建SSH环境之添加所需jar包
  9. POJ - 1836 Alignment (动态规划)
  10. python -- 进程线程协程专题