Java基础:整型数组(int[]、Integer[])排序
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的,现在用了,满足了。
Java基础:整型数组(int[]、Integer[])排序的更多相关文章
- java消除整型数组中重复的元素,排序后输出新数组
法一: import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(S ...
- java 将整型数组转化为字符串
java arrays 和arrayList 的区别 package com.vc; import java.util.Arrays; public class Demo05 { public sta ...
- 057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和
057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和 本文知识点:求整型数组的数组元素的元素值累加和 案例:求整型数 ...
- Java整型数组的最大长度到底有多长?
Java整型数组的最大长度到底有多长? 今天上网查了一下,各种说法都有,这个问题似乎总困扰我们Java初学者,无奈,只好自己试了一下,以下是我的测试代码,如果有错误,还望不吝赐教! 使用eclipse ...
- Android jni 编程3(对基本类型一维整型数组的操作)总结版
主要学习资料:黑马程序员的NDK方法使用(生产类库so) jni编程指南中文版(已上传至博客园) 博主文章(它使用的是VS和eclipse联合开发):http://www.c ...
- Android jni 编程2(对基本类型一维整型数组的操作)
参考教程和这位博主的对一维数组的处理,主要包括以下三种类型: //传入一维数组,无返回值 public native void arrayEncode(int[] arr); //传一个一维数组和数组 ...
- java基础知识4--数组的常用方法(Array)
先说一个idea编辑器的问题,编辑器的光标变成黑色光标无法移动,按一下insert键就好了. 数组是线性数据存储结构.它用牺牲自动扩展大小来换取与集合相比的唯一优势--查询效率的提升.本身是一种引用类 ...
- Android jni 编程4(对基本类型二维整型数组的操作)
Android jni 编程 对于整型二维数组操作: 类型一:传入二维整型数组,返回一个整型值 类型二:传入二维整型数组,返回一个二维整型数组 声明方法: private native int Sum ...
- 实验12:Problem H: 整型数组运算符重载
Home Web Board ProblemSet Standing Status Statistics Problem H: 整型数组运算符重载 Problem H: 整型数组运算符重载 Tim ...
- c# 计算一个整型数组的平均
一个整型数组的平均: class Program { static void Main(string[] args) { ,,,,,,,,,}; double avg= GetAvg(array); ...
随机推荐
- typescript接口(学习笔记非干货)
typescript的核心原则之一就是对所具有的shape类型检查结构性子类型化 One of the core principles of typescript is to check struct ...
- 洛谷 P4375 [USACO18OPEN]Out of Sorts G(树状数组求冒泡排序循环次数加强版)
传送门:Problem 4375 参考资料: [1]:https://www.cnblogs.com/Miracevin/p/9662350.html [2]:https://blog.csdn.ne ...
- 搭建Spring4+Spring MVC web工程的最佳实践
Spring是个非常非常非常优秀的java框架,主要是用它的IOC容器帮我们依赖注入和管理一些程序中的Bean组件,实现低耦合关联,最终提高系统可扩展性和可维护性,用它来辅助我们构建web工程将会感觉 ...
- sklearn多分类问题
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- selenium_采集药品数据
Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...
- Spark进阶之路-Standalone模式搭建
Spark进阶之路-Standalone模式搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Spark的集群的准备环境 1>.master节点信息(s101) 2&g ...
- PLSQL Developer 连接Linux 下Oracle的安装与配置
一.下载 下载地址:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html 这是Ora ...
- linux 出现ping,错误提示:connect :network is unreachable
今天克隆Centos7后 修改IP地址 修改前: IP:172.16.0.198 默认网关:172.16.0.254 修改后: IP:172.16.1.100 默认网关:172.16.0.25 ...
- SerializeField和HideInInspector
在Unity中,一个变量为公有类型,但是呢你不想让它显示在属性面板上,这个时候用 [HideInInspector] 这是隐藏的意思,举例: 用了[HideInInspector] 之后 就是这样用的 ...
- Git,Github和Gitlab简介和基本使用
什么是Git Git是一个版本控制系统(Version Control System,VCS). 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 多年前,我在法国做第一 ...