笔记:

 //排序真麻烦!没有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接口 (定制排序)的更多相关文章

  1. Java基础(9)——数组

    难点儿的已经过去啦,现在又开始基础了哈~ 之前讲变量的时候,变量是一个个的呀~,那我要搞一串变量该啷个办呢?Java给我们出了个好东西叫数组(*^▽^*) 数组呢,就是将变量一组一组的存起来,这个也是 ...

  2. Java基础:整型数组(int[]、Integer[])排序

    Windows 10家庭中文版,java version "1.8.0_152",Eclipse Oxygen.1a Release (4.7.1a), 参考链接:http://w ...

  3. Java基础——TreeSet

    TreeSet是SortedSet接口的实现类,Sorted的英文意思是分类的:选择的. TreeSet可以确保集合元素处于排序状态.与HashSet集合相比,TreeSet还提供了如下几个额外方法: ...

  4. java基础-冒泡排序以及稀疏数组

    java基础 以下内容为本人的学习笔记,如需要转载,请声明原文链接   https://www.cnblogs.com/lyh1024/p/16720908.html Ø 冒泡排序原理: 比较数组中, ...

  5. Java基础教程——二维数组

    二维数组 Java里的二维数组其实是数组的数组,即每个数组元素都是一个数组. 每个数组的长度不要求一致,但最好一致. // 同样有两种风格的定义方法 int[][] _arr21_推荐 = { { 1 ...

  6. Java基础进阶:学生管理系统数组方式分包源码实现,教师管理系统集合和数组两种方式源码实现,图书馆管理系统源码实现,现附重难点,代码实现源码,课堂笔记,课后扩展及答案

    1.案例驱动模式 1.1案例驱动模式概述 (理解) 通过我们已掌握的知识点,先实现一个案例,然后找出这个案例中,存在的一些问题,在通过新知识点解决问题 1.2案例驱动模式的好处 (理解) 解决重复代码 ...

  7. 夯实Java基础(一)——数组

    1.Java数组介绍 数组(Array):是多个相同类型元素按一定顺序排列的集合. 数组是编程中最常见的一种数据结构,可用于存储多个数据,每个数组元素存放一个数据,通常我们可以通过数组元素的索引来访问 ...

  8. java基础学习04(数组与方法)

    数组与方法 一.完成的目标 1. 掌握数组的定义.使用方法.引用传递 2. 掌握方法及其方法的重载 3. 使用方法接收和返回一个数组 4. java新特性对数组的操作支持 二.数组的定义和使用 数组是 ...

  9. java基础编程——二维数组中的查找

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...

随机推荐

  1. 使用expect实现自动交互,shell命令行自动输入,脚本自动化,变量引用,expect spawn执行带引号命令,expect 变量为空,不生效,不能匹配通配符*,函数,数组

    背景 有需求,在允许命令或者脚本跳出交互行,需要进行内容输入,但需要人手动输入,不是很方便,此时可以通过expect来实现自动互动交互. expect是一个自动交互功能的工具,可以满足代替我们实际工作 ...

  2. 安装Node.js教程

    前期准备 1.Node.js 简介简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node ...

  3. PTA 8-1 jmu-java-流、文件与正则表达式 (5 分)

    0.字节流与文件 我的代码: public static byte[] readFile(String path){ File file = new File(path); FileInputStre ...

  4. PGA+SGA的几个参数操作

    1.sga_max_size;是静态的必须重启之后生效需要加scope=spfile;(不要超过物理内存值) SQL> alter system set sga_max_size=500M sc ...

  5. [LuoguP1155]双栈排序_二分图_bfs

    双栈排序 题目链接:https://www.luogu.org/problem/P1155 数据范围:略. 题解: 神仙题. 就第一步就够劝退了. 这个二分图非常不容易,首先只有两个栈,不是属于一个就 ...

  6. java源码 -- LinkedHashMap

    一.概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题. 除此之外,Linke ...

  7. Java 代码读取properties文件

    jdk1.6 package read;import java.io.File;import java.io.FileInputStream;import java.io.IOException;im ...

  8. 【坑】Mybatis 多次逆向工程生成mapper文件

    在使用 mybatis 逆向工程的时候,多次逆向工程生成的文件,是不会产生覆盖的,而是追加: 假如,你第一次逆向,发生数据库的某个字段类型错了,修改以后再次逆向,那么得到的 mapper文件,将是 2 ...

  9. 【学习笔记】RMQ-Range Minimum/Maximum Query (区间最小/最大值)

    RMQ是一类询问区间最小/最大值的问题. 这类问题一般分成两类:静态区间(无修改),动态区间(带修改). 对于动态区间查询最大/最小,我们显然可以用线段树来解决…… 那么对于静态区间查询最大/最小的问 ...

  10. oddo

    看了这张图,或许你对odoo有了一些兴趣. https://www.cnblogs.com/wterp/p/9093616.html 这次就是和大家一起交流开源ERP/CRM系统:odoo 对以下读者 ...