笔记:

 //排序真麻烦!没有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. 最新 中手游java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.中手游等10家互联网公司的校招Offer,因为某些自身原因最终选择了中手游.6.7月主要是做系统复习.项目复盘.LeetCo ...

  2. 最新 游族网络java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.游族网络等10家互联网公司的校招Offer,因为某些自身原因最终选择了游族网络.6.7月主要是做系统复习.项目复盘.Leet ...

  3. 在同一个页面多次调用el-select选择器

    elementui是一个十分好用的组件库,但毕竟也不能做到面面俱到,有些还是要根据根据自己的实际需求做一些自定义的方法. 比如el-select选择器在同一个页面使用多次的话就会造成选择一个另一个也会 ...

  4. 在React native 如何写if判断和for循环

    在vue中一般在需要判断时都是通过if语句来实现的,但是在react native中一般则通过三元运算法来实现. 具体代码如下所示. import React from 'react'; import ...

  5. sas(Serial Attached SCSI)技术详解

    1.什么是SAS 即串行SCSI技术,是一种磁盘连接技术,它综合了并行SCSI和串行连接技术(FC,SSA,IEEE1394)的优势,以串行通讯协议为协议基础架构,采用SCSI-3扩展指令集,并兼容S ...

  6. nginx 四个主要组成部分

    1.Nginx 二进制可执行文件 由各模块源码编译出的一个文件 2.Nginx.conf 配置文件 控制nginx如何运行 3.access.log 访问日志 记录http请求信息 4.error.l ...

  7. Redis 常用命令学习二:字符串类型命令

    1.赋值与取值命令 127.0.0.1:6379> set foo helloredis OK 127.0.0.1:6379> get foo "helloredis" ...

  8. Linux下的静态库与动态库的生成与调用

    静态库与动态库 静态函数库 这类库的名字一般是libxxx.a,xxx为库的名字.利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行 ...

  9. SDOI2010_大陆争霸(邻接表存图)

    题目描述 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的 克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭 的神曾·布拉泽,而克里斯国信仰象征光明和永恒的神斯 ...

  10. msql 数据类型

    1.数据类型 #1. 数字: 整型:tinyinit int bigint 小数: float :在位数比较短的情况下不精准 double :在位数比较长的情况下不精准 0.0000012301231 ...