Java基础 TreeSet()来实现数组的【定制排序】 : Comparable接口(自然排序) 或者 Comparator接口 (定制排序)
笔记:
//排序真麻烦!没有C++里的好用又方便!ORZ!ORZ!数组排序还还自己写个TreeSet()和( Comparable接口(自然排序) 或者 Comparator接口 (定制排序))
import java.util.*;
import java.lang.*;
/**对象排序
* a.实现Comparable接口 + TreeSet()自定义排序 Student[id,name]数组
* 创建一个Student类,实现Comparable接口 ,实现按id自动降序排序
* (可以直接引用自然排序compareTo)1.TreeSet<Student> ts2=new TreeSet<Student>(Student::compareTo);
*
* b.比较器Comparator接口 + TreeSet()自定义排序数组
* b.(定义了匿名的)比较器Comparator(接口) + TreeSet()自定义排序数组
* Comparator<Student> com = new Comparator<>() { ...阔以自动生成! }
*/
测试代码:public class TestSet {
public static void main(String[] args) {
// a.实现Comparable接口 + TreeSet()自定义排序数组
Student[] stud=new Student[]{ //需要排序的数组
new Student(1001,"王大"),
new Student(1002,"张三"),
new Student(1003,"李四"),
new Student(1004,"王五") };
TreeSet<Student> ts=new TreeSet<Student>();
for(int i=0;i<stud.length;i++)
ts.add(stud[i]);
test_TreeSet(ts);
// b.(定义了匿名的)比较器Comparator(接口) + TreeSet()自定义排序数组
Comparator<Student> com = new Comparator<>() {
@Override
public int compare(Student o1, Student o2) { //按id从小到大排序//----o2-----o1(在后面)--- 返回1不变,-1颠倒
if(o1.id>o2.id)return 1;
else if(o1.id<o2.id) return -1;
else return 0;
}
};
TreeSet<Student> ts3=new TreeSet<Student>(com);
for(int i=0;i<stud.length;i++)
ts3.add(stud[i]);
test_TreeSet(ts3);
}
static void test(Collection s){
for(Object o:s){
System.out.print(o+"\t");
}
System.out.println("---------->>"+s.getClass()+"---------");
}
static void test_TreeSet(TreeSet<Student> s){
for(Student o:s){
System.out.print(o.id+" "+o.name+"\t");
}
System.out.println("---------->>"+s.getClass()+"---------");
}
}
class Student implements Comparable<Student>{
int id;
String name;
public int compareTo(Student s) { //从大到小,降序排序 //----s-----this(在后面)--- 返回1不变,-1颠倒
if(this.id<s.id)return 1;
else if(this.id>s.id)return -1;
else return 0;
}
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
}
测试输出:
Java基础 TreeSet()来实现数组的【定制排序】 : Comparable接口(自然排序) 或者 Comparator接口 (定制排序)的更多相关文章
- Java基础(9)——数组
难点儿的已经过去啦,现在又开始基础了哈~ 之前讲变量的时候,变量是一个个的呀~,那我要搞一串变量该啷个办呢?Java给我们出了个好东西叫数组(*^▽^*) 数组呢,就是将变量一组一组的存起来,这个也是 ...
- Java基础:整型数组(int[]、Integer[])排序
Windows 10家庭中文版,java version "1.8.0_152",Eclipse Oxygen.1a Release (4.7.1a), 参考链接:http://w ...
- Java基础——TreeSet
TreeSet是SortedSet接口的实现类,Sorted的英文意思是分类的:选择的. TreeSet可以确保集合元素处于排序状态.与HashSet集合相比,TreeSet还提供了如下几个额外方法: ...
- java基础-冒泡排序以及稀疏数组
java基础 以下内容为本人的学习笔记,如需要转载,请声明原文链接 https://www.cnblogs.com/lyh1024/p/16720908.html Ø 冒泡排序原理: 比较数组中, ...
- Java基础教程——二维数组
二维数组 Java里的二维数组其实是数组的数组,即每个数组元素都是一个数组. 每个数组的长度不要求一致,但最好一致. // 同样有两种风格的定义方法 int[][] _arr21_推荐 = { { 1 ...
- Java基础进阶:学生管理系统数组方式分包源码实现,教师管理系统集合和数组两种方式源码实现,图书馆管理系统源码实现,现附重难点,代码实现源码,课堂笔记,课后扩展及答案
1.案例驱动模式 1.1案例驱动模式概述 (理解) 通过我们已掌握的知识点,先实现一个案例,然后找出这个案例中,存在的一些问题,在通过新知识点解决问题 1.2案例驱动模式的好处 (理解) 解决重复代码 ...
- 夯实Java基础(一)——数组
1.Java数组介绍 数组(Array):是多个相同类型元素按一定顺序排列的集合. 数组是编程中最常见的一种数据结构,可用于存储多个数据,每个数组元素存放一个数据,通常我们可以通过数组元素的索引来访问 ...
- java基础学习04(数组与方法)
数组与方法 一.完成的目标 1. 掌握数组的定义.使用方法.引用传递 2. 掌握方法及其方法的重载 3. 使用方法接收和返回一个数组 4. java新特性对数组的操作支持 二.数组的定义和使用 数组是 ...
- java基础编程——二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
随机推荐
- 第 20 课 go如何实现继承的 && 给引用模块起别名
golang语言中没有继承,但是可以依靠组合来模拟继承和多态. package controllers import ( "encoding/json" md "gowe ...
- CentOS 7 安装wordpress
1.安装php 要安装php 7,必须使用下面的命令在Centos7系统上安装并启用epel和remi存储库. 输入一下代码, yum install http://rpms.remirepo.net ...
- Go之接口interface(1)
1. 什么是interface在此之前,我们遇到的都是具体的类型,比如数字类型.切片类型等等.对于这些具体的类型,我们总是能知道它是什么.可以利用它来做什么,比如对于一个数字类型,我们知道可以对其进行 ...
- CentOS使用yum安装jdk
1.查看系统版本命令 cat /etc/issue 2.查看yum包含的jdk版本 yum search java 或者 yum list java* 版本 jre jdk 1.8 java-1.8. ...
- PGA+SGA的几个参数操作
1.sga_max_size;是静态的必须重启之后生效需要加scope=spfile;(不要超过物理内存值) SQL> alter system set sga_max_size=500M sc ...
- C++Primer 5th Chap5 Statements
else语句对应的始终是最近的那条if语句,除非有{}强行控制,如: if(A){ if(B){/*.............*/} }else{/*.......*/}//这里else和if(A)对 ...
- python学习-22 字符串格式化
格式化包括:百分号方式和format方式 1.百分号 - %s (%.4s 表示截取了4个字符) 传单个值: 例如: print('i am %s sex boy is ljj'%123) 运 ...
- Spring @Transactional注解在什么情况下会失效,为什么?
出处: https://www.cnblogs.com/hunrry/p/9183209.html https://www.cnblogs.com/protected/p/6652188.htm ...
- harbor环境搭建及web使用
概述 Habor是由VMWare公司开源的容器镜像仓库.事实上,Habor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基 ...
- hdu 3342 拓扑模板题
直接上代码吧 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ...