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[])排序的更多相关文章

  1. java消除整型数组中重复的元素,排序后输出新数组

    法一: import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(S ...

  2. java 将整型数组转化为字符串

    java arrays 和arrayList 的区别 package com.vc; import java.util.Arrays; public class Demo05 { public sta ...

  3. 057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和

    057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和 本文知识点:求整型数组的数组元素的元素值累加和 案例:求整型数 ...

  4. Java整型数组的最大长度到底有多长?

    Java整型数组的最大长度到底有多长? 今天上网查了一下,各种说法都有,这个问题似乎总困扰我们Java初学者,无奈,只好自己试了一下,以下是我的测试代码,如果有错误,还望不吝赐教! 使用eclipse ...

  5. Android jni 编程3(对基本类型一维整型数组的操作)总结版

    主要学习资料:黑马程序员的NDK方法使用(生产类库so)              jni编程指南中文版(已上传至博客园) 博主文章(它使用的是VS和eclipse联合开发):http://www.c ...

  6. Android jni 编程2(对基本类型一维整型数组的操作)

    参考教程和这位博主的对一维数组的处理,主要包括以下三种类型: //传入一维数组,无返回值 public native void arrayEncode(int[] arr); //传一个一维数组和数组 ...

  7. java基础知识4--数组的常用方法(Array)

    先说一个idea编辑器的问题,编辑器的光标变成黑色光标无法移动,按一下insert键就好了. 数组是线性数据存储结构.它用牺牲自动扩展大小来换取与集合相比的唯一优势--查询效率的提升.本身是一种引用类 ...

  8. Android jni 编程4(对基本类型二维整型数组的操作)

    Android jni 编程 对于整型二维数组操作: 类型一:传入二维整型数组,返回一个整型值 类型二:传入二维整型数组,返回一个二维整型数组 声明方法: private native int Sum ...

  9. 实验12:Problem H: 整型数组运算符重载

    Home Web Board ProblemSet Standing Status Statistics   Problem H: 整型数组运算符重载 Problem H: 整型数组运算符重载 Tim ...

  10. c# 计算一个整型数组的平均

    一个整型数组的平均: class Program { static void Main(string[] args) { ,,,,,,,,,}; double avg= GetAvg(array); ...

随机推荐

  1. The 2016 ACM-ICPC Asia Beijing Regional Contest E - What a Ridiculous Election

    https://vjudge.net/contest/259447#problem/E bfs,k个限制条件以数组的额外k维呈现. #include <bits/stdc++.h> usi ...

  2. Linux:批量修改分隔符(awk、BEGIN、FS、OFS、print、tr命令)

    批量修改文件的分隔符,可以用FS和OFS命令 FS:Field Separator,字段分隔符 OFS:Out of Field Separator,输出字段分隔符 修改空格为分隔符 假设有这么一个文 ...

  3. 选择监听事件ItemListener(是否被选择)

    [界面说明] 下拉列表框,选谁谁显示.复选框与单选按钮,输出被选与否的状态.知识点主要代码为: int state = e.getStateChange(); ItemEvent.SELECTED I ...

  4. .Net MVC个人笔记

    关于转向的问题,目前知道的是Response.Redirect 和 location.href 我现在有两个controller,Home和Test <h2>this is Home< ...

  5. CM记录-升级Spark版本到2.x(转载)

    ①csd包:http://archive.cloudera.com/spark2/csd/    下载SPARK2_ON_YARN-2.2.0.cloudera1.jar ②parcel包:http: ...

  6. CM记录-Hadoop参数调优

    1.HDFS调优 a.设置合理的块大小(dfs.block.size) b.将中间结果目录设置为分布在多个磁盘以提升写入速度(mapred.local.dir) c.设置DataNode处理RPC的线 ...

  7. TCP和UDP的区别和优缺点

    1.TCP与UDP区别总结: 1.TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接2.TCP提供可靠的服务.也就是说,通过TCP连接传送的数据,无差错,不丢失 ...

  8. java基本数据类型,访问控制符,运算符执行顺序

    1.java数据类型 内置数据类型:boolean(1),  byte(8), char(16), short(8), int(32), long(64), float(32), double(64) ...

  9. linux僵尸进程产生的原因以及如何避免产生僵尸进程

    给进程设置僵尸状态的目的是维护子进程的信息,以便父进程在以后某个时间获取.这些信息包括子进程的进程ID.终止状态以及资源利用信息(CPU时间,内存使用量等等).如果一个进程终止,而该进程有子进程处于僵 ...

  10. VUE2.0 饿了吗视频学习笔记(二):新版本添加路由和显示Header

    https://gitee.com/1981633/vue_study.git 源码下载地址,随笔记动态更新中 webpack.dev.conf.js中添加两段代码 'use strict' cons ...