JAVA中sort()函数的使用方法的个人总结

2023-10-26

1.sort()函数的基本格式(默认排序为升序排序)

Arrays.sort(int[] a, int fromIndex, int toIndex);Arrays.sort(数组名,起始下标,终止下标);

一个简单的排序例子

import java.util.Arrays;
import java.util.Scanner;
import java.util.*;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc= new Scanner(System.in);
		int n=sc.nextInt();
		int[] a= new int[10001];
		for(int i=0;i<n;i++){
			a[i]=sc.nextInt();
		}
		Arrays.sort(a,0,n);
		for(int i=0;i<n;i++){
			if(i==n-1){
				System.out.println(a[i]);
			}
			else{
				System.out.print(a[i]+" ");
			}
		}
	}

}

2.如果一个数组初始化时已经赋值。则sort函数可以另外一种格式

Arrays.sort(数组名);

ex:

    import java.util.*;  
    import java.util.Arrays;  
    public class Main {  
        public static void main(String[] args) {  
              
            Scanner sc=new Scanner(System.in);  
                int num[]= {5,4,3,2,1};                    
                Arrays.sort(num);                    
                for(int i=0;i<5;i++)  
                {  
                    System.out.println(num[i]);  
                      
                }  
          
      
        }  
    }  

cmp函数的格式:   int compare(Object o1, Object o2);

我们可以看到,传入函数的是java中的类(java中没有结构体)

这时,sort函数的格式变为:  Arrays.sort(数组名, 起始下标, 终止下标, new cmp());

 

 

怎么自定义排序呢?
基本方法

int compare(Object o1, Object o2) 返回一个基本类型的整型
如果要按照升序排序,
则o1 小于o2,返回-1(负数),相等返回0,01大于02返回1(正数)
如果要按照降序排序
 则o1 小于o2,返回1(正数),相等返回0,01大于02返回-1(负数)

 

举个例子。-----输入n个数,然后降序排序。

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

class shu{
	int x;
}
class cmp implements Comparator<shu>{
	public int compare(shu a,shu b){
		if(a.x<b.x){
			return 1;
		}
		else if(a.x>b.x){
			return -1;
		}
		else{
			return 0;
		}
		//可以简化成
		//return b.x-a.x
	}
}
public class Main {
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int n=sc.nextInt();
		shu num[] = new shu[100];
		for(int i=0;i<n;i++){
			num[i]=new shu();    ///这个地方容易漏  
			num[i].x=sc.nextInt();
		}
		
		Arrays.sort(num,0,n,new cmp());
		
		for(int i=0;i<n;i++){
			if(i==n-1){
				System.out.println(num[i].x);  
			}
			else{
				System.out.print(num[i].x+" ");  
			}			
		}
		sc.close();
}
	}

下面是一个变式,大体意思是输入一个字符串(名字),接着两个整数,可以代表成绩,首先按X排序,若相同,再看y,根据y排序,最后输出名字与两个成绩。

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

class shu{
	String name;
	int x;
	int y;
}
class cmp implements Comparator<shu>{
	public int compare(shu a,shu b){
		if(a.x<b.x){
			return 1;
		}
		else if(a.x>b.x){
			return -1;
		}
		else{
			if(b.y>a.y){
				return 1;
			}
			else if(b.y<a.y){
				return -1;
			}
			else{
				return 0;
			}
		}
	}
}
public class Main {
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int n=sc.nextInt();
		shu num[] = new shu[100];
		for(int i=0;i<n;i++){
			num[i]=new shu();
			num[i].name=sc.next();
			num[i].x=sc.nextInt();
			num[i].y=sc.nextInt();
		}
		
		Arrays.sort(num,0,n,new cmp());
		
		for(int i=0;i<n;i++){
				System.out.println(num[i].name+":"+num[i].x+" "+num[i].y);  
		}
		sc.close();
}
	}

对名字按字母排序时可以用到的:

import java.text.CollationKey;
import java.text.Collator;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.Locale;
import java.util.Scanner;

class shu{
	String name;
	int g;
}
class cmp implements Comparator<shu>{
	public int compare(shu a,shu b){
		if(b.g==a.g){
			 Collator collator = Collator.getInstance(Locale.ENGLISH);
			 CollationKey key1 = collator.getCollationKey(a.name);
			 CollationKey key2=collator.getCollationKey(b.name);
			 return key1.compareTo(key2);
//			int temp=b.name.charAt(0)-a.name.charAt(0);
//			return -temp;
		}
		else return b.g-a.g;
	}
}
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		shu[] a=new shu[100];
		for(int i=0;i<n;i++){
			a[i]=new shu();
			a[i].name=sc.next();
			a[i].g=sc.nextInt();
		}
		Arrays.sort(a,0,n,new cmp());
		for(int i=0;i<n;i++){
			System.out.println(a[i].name+";"+a[i].g);
		}
	}

}

排序重点:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA中sort()函数的使用方法的个人总结 的相关文章

  • 我是否需要安装 SQLite 才能使 SQLiteJDBC 正常工作?

    我想我只是没有 明白 如果我的计算机上尚未安装 SQLite 并且我想编写一个使用嵌入式数据库的 Java 应用程序 并且我将 SQLiteJDBC JAR 下载 导入到我的项目中 那么这就是我所需要的吗 或者 我是否需要先安装 SQLit
  • java中监视目录变化

    我正在使用 WatchService 来监视目录中的更改 特别是目录中新文件的创建 下面是我的代码 package watcher import java nio file import static java nio file Stand
  • Java:扩展类并实现具有相同方法的接口

    可能无法完成以下操作 我收到编译错误 继承的方法 A doSomthing int 无法隐藏 B 中的公共抽象方法 public class A int doSomthing int x return x public interface
  • 如何在 JavaFX 中连接可观察列表?

    我所说的串联是指获得一个新列表 该列表侦听所有串联部分的更改 方法的目的是什么FXCollections concat ObservableList
  • 与 Eclipse 中的 Java Content Assist 交互

    作为我的插件项目的一部分 我正在考虑与 Eclipse 在 Java 文件上显示的内容辅助列表进行交互 我正在尝试根据一些外部数据对列表进行重新排序 我看过一些有关创建新内容辅助的教程 但没有看到有关更改现有内容辅助的教程 这可能吗 如果是
  • Java 的支持向量机?

    我想用Java编写一个 智能监视器 它可以随时发出警报detects即将到来的性能问题 我的 Java 应用程序正在以结构化格式将数据写入日志文件
  • Android:文本淡入和淡出

    我已阅读此 stackoverflow 问题和答案 并尝试实现文本淡入和淡出 Android中如何让文字淡入淡出 https stackoverflow com questions 8627211 how to make text fade
  • Thymeleaf 3 Spring 5 映射加载字符串而不是 HTML

    我正在尝试将 Spring 5 和 Thymeleaf 3 一起配置 我正在 Eclipse 上工作 我使用 全新安装 构建并使用 springboot run 运行应用程序 我已经设置了一个控制器和几个模板 但 Thymeleaf 似乎找
  • Android studio - 如何保存先前活动中选择的数据

    这是我的代码片段 这Textview充当按钮并具有Onclicklistner在他们 当cpu1000时Textview单击它会导致cpu g1000其代码如下所示的类 public class Game 1000 extends AppC
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • 提供节点名或服务名,或未知 Java

    最近我尝试运行我的 Java 项目 每当我运行它并将其打开到我得到的服务器地址时 Unable to determine host name java net UnknownHostException Caused by java net
  • Android 无法解析日期异常

    当尝试解析发送到我的 Android 客户端的日期字符串时 我得到一个无法解析的日期 这是例外 java text ParseException 无法解析的日期 2018 09 18T00 00 00Z 位于 偏移量 19 在 java t
  • Sun 在 EDT 之外做 GUI 工作的演示?

    我正在看SplashDemo java http download oracle com javase tutorial uiswing examples misc SplashDemoProject src misc SplashDemo
  • 将人类日期(当地时间 GMT)转​​换为日期

    我正在服务器上工作 服务器正在向我发送 GMT 本地日期的日期 例如Fri Jun 22 09 29 29 NPT 2018在字符串格式上 我将其转换为日期 如下所示 SimpleDateFormat simpleDateFormat ne
  • 如何在 ant 中为 junit 测试设置 file.encoding?

    我还没有完全完成file encoding 和 ant https stackoverflow com questions 1339352 how do i set dfile encoding within ants build xml
  • Akka 与现有 java 项目集成的示例

    如果我已经有现有的javaWeb 应用程序使用spring and servlet容器 将 Akka 集成到其中的正确方法是什么 就像我将会有Actor1 and Actor2互相沟通的 开始使用这些演员的切入点是什么 例如 1 把它放在那
  • 提高 PostgreSQL 1 亿数据左连接查询性能

    我在用Postgresql 9 2 version Windows 7 64 bit RAM 6GB 这是一个Java企业项目 我必须在我的页面中显示订单相关信息 有三个表通过左连接连接在一起 Tables TV HD 389772 行 T
  • 不可变的最终变量应该始终是静态的吗? [复制]

    这个问题在这里已经有答案了 在java中 如果一个变量是不可变的并且是final的 那么它应该是一个静态类变量吗 我问这个问题是因为每次类的实例使用它时创建一个新对象似乎很浪费 因为无论如何它总是相同的 Example 每次调用方法时都会创
  • 手动设置Android Studio的JDK路径

    如何为 Android Studio 使用自定义 JDK 路径 我不想弄乱 PATH 因为我没有管理员权限 是否有某个配置设置文件允许我进行设置 如果您查看项目设置 您可以从那里访问 jdk 在标准 Windows 键盘映射上 您可以在项目
  • Android S8+ 警告消息“不支持当前的显示尺寸设置,可能会出现意外行为”

    我在 Samsung S8 Android 7 中收到此警告消息 APP NAME 不支持当前的显示尺寸设置 可能会 行为出乎意料 它意味着什么以及如何删除它 谢谢 通过添加解决supports screens 机器人 xlargeScre

随机推荐

  • word2003脚注问题

    问题分析 在题目上插入脚注的时候 脚注放在文件结尾 然后正文拆开了 不能续前节 解决办法 word2003中 工具 gt 选项 gt 兼容性
  • Java中的byte详解

    Java中的byte详解 介绍 byte 即字节 由8位的二进制组成 在Java中 byte类型的数据是8位带符号的二进制数 在计算机中 8位带符号二进制数的取值范围是 128 127 所以在Java中 byte类型的取值范围也是 128
  • OpenGL 红宝书 反走样 雾 点参数 多边形偏移

    6 2 反走样 void glHint GLenum target GLenum hint 控制OpenGL的某些行为 参数target是要控制的行为 参数hint可以是GL FASTEST GL NICEST GL DONT CARE 效
  • 组成原理---中断

    文章目录 中断的基本概念 中断请求与判优 中断响应 中断服务与返回 中断系统是计算机中实现中断功能的软 硬件总称 一般在 CPU 中配置中断机构 在外设接口中配置中断控制器 在软件上设计相应的中断初始化程序和中断服务程序 中断的基本概念 在
  • python从入门到精通 第一节 数据类型

    Python 中的变量不需要声明 每个变量在使用前都必须赋值 变量赋值以后该变量才会被创建 在 Python 中 变量就是变量 它没有类型 我们所说的 类型 是变量所指的内存中对象的类型 等号 用来给变量赋值 等号 运算符左边是一个变量名
  • 分布式锁的实现与应用

    为什么需要锁 在多任务环境下解决并发场景的数据竞争问题 Java常见锁 我们可以根据锁是否包含某一特性来进行分组归类 从线程是否对资源加锁 可以将锁分为乐观锁和悲观锁 从资源已被锁定时 线程是否阻塞 可以分为自旋锁 JUC下的atomic家
  • react实现计数器

    var In display gt div display div var Btn click gt
  • 同页面javascript中文参数传递

    修改前
  • VMware Workstation 14 Pro 安装 Windows Server 2003(完)

    一 下载镜像文件 Windows Server 2003有多种版本 每种都适合不同的商业需求 Windows Server 2003 Web Edition WindowsServer2003Web版 用于构建和存放Web应用程序 网页和X
  • Python入门的20个基础练习

    01 Hello World python的语法逻辑完全靠缩进 建议缩进4个空格 如果是顶级代码 那么必须顶格书写 哪怕只有一个空格也会有语法错误 下面示例中 满足if条件要输出两行内容 这两行内容必须都缩进 而且具有相同的缩进级别 pri
  • sqli - labs - Less 17

    我们先来看看源码 这里我们可以看到 首先进行上传数据的判断 但是 uname是通过上面的check input函数进行相关过滤所以用户名必须要正确 密码可以忽略 所以本关在密码这里找到突破口 可以看出在得到row变量之后 如果不为空 代码将
  • STM32跳至硬件错误中断(HardFault_Handle)

    1 遇到错误问题是数据类型不对 导致该步骤永远不能执行到 跳至硬件错误中断 所以硬件中断可尝试查找数据类型错误 2 堆栈设置错误也会跳至hardwarefault 3 如果上电后 在调试时 执行单步 会在不确定位置的地方产生HardFaul
  • 基于OpenCV的手势识别完整项目(Python3.7)

    这是我的本科毕设题目 刚开始接触机器学习这方面 感谢CSDN和GitHub上的大佬 网上类似项目很多 方法也有很多 自己顺带进行了整理 边做毕设边分享一下自己学习心得吧 也算是梳理一下所学知识 各大佬有什么好的建议还请指出 不吝赐教 项目简
  • Qt的槽函数崩溃问题

    当Qt的槽函数是一个lambda表达式时 如果传入的方法为引用传递 而你又在lambda表达式里使用了外面定义的stl或类 那么就会崩溃 这是因为Qt的槽函数是一个轮询的过程 第一次你进入这个表达式结束时会进行一次自动析构 第二次进入这个l
  • linux删除文件后没有释放空间

    系统 centos 7 现象 早上收到阿里云短信 发现一台服务器的磁盘空间使用率达到90 昨天晚上已经加了定时任务 难道没有啥用 无奈的我打开电脑 解决 由于已经解决 当时没有截图 查看磁盘空间 df h 找到对应文件 进行删除 rm fi
  • yaml文件的读写

    官方使用文档 https yaml cpp docsforge com 写入 include
  • addr2line命令

    在Linux下写C C 程序的程序员 时常与Core Dump相见 在内存越界访问 收到不能处理的信号 除零等错误出现时 我们精心或不精心写就的程序就直接一命呜呼了 Core Dump是Linux仁慈地留下的程序的尸体 帮助程序员们解决了一
  • Layout Object Tree 创建

    站在老罗的肩膀上 https blog csdn net luoshengyang article details 50615628 每一个HTML标签在DOM Tree中都有一个对应的HTMLElement节点 相应地 在DOM Tree
  • java集合框架--集合接口

    java 集合框架使程序处理集合数组的方法标准化 集合框架包含了一组标准的接口 对这些接口 提供了几个标准的实现工具 LinkedList HashSet 和 TreeSet 集合接口 接口 描述 Collection 集合框架的顶层接口
  • JAVA中sort()函数的使用方法的个人总结

    1 sort 函数的基本格式 默认排序为升序排序 Arrays sort int a int fromIndex int toIndex Arrays sort 数组名 起始下标 终止下标 一个简单的排序例子 import java uti