Java基础:整型数组(int[]、Integer[])排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java基础:整型数组(int[]、Integer[])排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3226字,纯文字阅读大概需要5分钟。
内容图文
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、匿名内部类,,稍候会对其进行改进。
1 import java.util.Arrays; 2 import java.util.Comparator; 3 4 public class SortArray { 5 6 public static void main(String[] args) throws Exception { 7int array[] = {2, 5, -2, 6, -3, 8, 0, -7, -9, 4}; 8 Arrays.sort(array); 910 printArray("数组排序结果为:", array); 11int index = Arrays.binarySearch(array, 2); 12 System.out.print("元素2在第 " + index + " 个位置"); 1314// 倒序排列15 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 }); 27 printArray2("数组排序结果为:", array2); 28 } 2930/**31 * 打印int型数组 32 * @param message 33 * @param array 34*/35privatestaticvoid printArray(String message, int[] array) { 36 System.out.println(message + ": [length = " + array.length + "]"); 37for (int i = 0; i < array.length; i++) { 38if (i != 0) { 39 System.out.print(", "); 40 } 41 System.out.print(array[i]); 42 } 43 System.out.println(); 44 } 4546/**47 * 打印Integer型数组 48 * @param message 49 * @param array 50*/51privatestaticvoid printArray2(String message, Integer[] array) { 52 System.out.println(message + ": [length = " + array.length + "]"); 53for (int i = 0; i < array.length; i++) { 54if (i != 0) { 55 System.out.print(", "); 56 } 57 System.out.print(array[i]); 58 } 59 System.out.println(); 60 } 61 }
下图是上面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 publicint compare(Integer o1, Integer o2) { return o1 > o2?-1:1; } });
注意上面代码的红色部分。现在, 没有强制类型转换了,可以直接比较o1、o2,因为它们的类型就是Integer。
完了吗?没有。还可以改造。更简洁。
Comparator是一个函数式接口(Functional Interface),因此,可以使用lambda表达式进一步简化(需要Java 8支持)。
改造后的代码如下:
1 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的,现在用了,满足了。
原文:https://www.cnblogs.com/luo630/p/9860433.html
内容总结
以上是互联网集市为您收集整理的Java基础:整型数组(int[]、Integer[])排序全部内容,希望文章能够帮你解决Java基础:整型数组(int[]、Integer[])排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。