文档章节

数组和集合排序总结

韩毅Evan
 韩毅Evan
发布于 2017/07/02 13:35
字数 575
阅读 6
收藏 0

1:数组排序

 String[] str = new String[]{“china”,”guangzhou”,”beijing”};
System.out.println(Arrays.toString(str));
Arrays.sort(str);
System.out.println(Arrays.toString(str)); 

2:数组对象里属性排序
2.1 使用Comparable接口

public classs Student implements Comparable<Student>{
    private int id;
    private int score;
    @Override
    public int compareTo(Student stu) {
        return Integer.valueOf(stu.score).compareTo(Integer.valueOf(this.score));
    }
}
Student[] stus = new Student[]{
    new Student("1001",90),
    new Student("1002",70),
    new Student("1003",100),
    new Student("1004",50),
}
Arrays.sort(stus);


2.2 使用Comparator接口

public classs Student{
    private int id;
    private int score;
}
Student[] stus = new Student[]{
    new Student("1001",90),
    new Student("1002",70),
    new Student("1003",100),
    new Student("1004",50),
}
Arrays.sort(stus, new Comparator<Student>() {
            @Override
            public int compare(Student stu1, Student stu2) {
        return Integer.valueOf(stu1.score).compareTo(Integer.valueOf(stu2.score));
            }
        });

================分隔线========================

1:集合排序
Collections.sort():

List<String> list = new ArrayList<String>();
list.add("你好!");
list.add("guangzhou");
list.add("china");
list.add("beijing");
System.out.println(list.toString());
Collections.sort(list);
System.out.println(list);

1.1:使用Comparator接口排序,同1

List<String> list = new ArrayList<String>();
list.add("你好!");
list.add("guangzhou");
list.add("china");
list.add("beijing");
System.out.println("原順序:"+list);
Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String str1, String str2) {
                return str1.compareTo(str2);//-1、0、1
            }
        });
System.out.println("自定義順序:"+list);
Collections.reverse(list);
System.out.println("然後再反序:"+list);


2:集合里的对象属性排序
2.1 使用Comparator接口

public classs Student{
    private int id;
    private int score;
}
List<Student> list = new ArrayList<Student>();
list.add(new Student("1001",90));
list.add(new Student("1002",70));
list.add(new Student("1003",100));
list.add(new Student("1004",50));
System.out.println("原順序:"+list);
Collections.sort(list, new Comparator<Student>() {
            @Override
            public int compare(Student stu1, Student stu2) {
        return Integer.valueOf(stu1.score).compareTo(Integer.valueOf(stu2.score));
            }
        });
System.out.println("自定義順序:"+list);
Collections.reverse(list);
System.out.println("然後再反序:"+list);

2.2 Comparable

public classs Student implements Comparable<Student>{
    private int id;
    private int score;
    @Override
    public int compareTo(Student stu) {
        return Integer.valueOf(stu.score).compareTo(Integer.valueOf(this.score));
    }
}
List<Student> list = new ArrayList<Student>();
list.add(new Student("1001",90));
list.add(new Student("1002",70));
list.add(new Student("1003",100));
list.add(new Student("1004",50));
System.out.println("原順序:"+list);
Collections.sort(list);
System.out.println("自定義順序:"+list);


2.3 扩展:TreeSet集合是有序集合(与add顺序不一致)

public classs Student implements Comparable<Student>{
    private int id;
    private int score;
    @Override
    public int compareTo(Student stu) {
        return Integer.valueOf(stu.score).compareTo(Integer.valueOf(this.score));
    }
}

TreeSet ts = new TreeSet<Student>();
ts.add(new Student("1001",90));
ts.add(new Student("1002",70));
ts.add(new Student("1003",100));
ts.add(new Student("1004",50));


结果为按照score排序的有序集合


compareTo方法原理
比较A、B连个int类型数字,A<B:-1、A=B:0、A>B:1
if(A<B){
    ruturn -1;
}else if(A==B){
    return 0;
}else{
    return 1;
}

改为三元运算符
A<B?-1:(A>B?1:0)

如果int改为Integer包装类型
A.compareTo(B)


总结:
Comparator对代码没有任何污染,耦合性低
Comparable对代码有污染,耦合性高
 

© 著作权归作者所有

韩毅Evan
粉丝 2
博文 49
码字总数 67347
作品 0
南京
私信 提问
Java Collection、Map集合总结

1.Java中的Collection集合总结 Collection   |---List(存储有序,可重复)     |---ArrayList       底层数据结构是数组,查询快,增删慢。       线程不安全、效率高  ...

hafiz.zhang
2016/05/02
0
0
JavaScript实现flatten多种方法

简介 我们在网上看到很多的关于数组的面试题,比如说给如下一个数组,把它拍平、去重、升序: 其实这个题有很多种解法,比如用 ,或者自己实现一个 函数,我们这里主要关注的时 方法的实现。 ...

asyncnode
09/12
0
0
数组查找算法,数组,a + b = c

题目 给定一个无序数组,例如int[] arr={3,5,8,9,12,21,27},列出所有满足条件的集合: 集合中包含两个值a、b(a和b都在数组中,且a不等于b) a+b=c,c也要在数组中 思考 先排序。 用 a ...

酒馆儒生
2017/12/07
0
0
Java面试相关---集合

清枫_小天
2016/08/08
0
0
【JAVA】集合框架 学习笔记

以下是我学习java集合框架的笔记,内容主要是个人理解和网络视频、文章的摘录。 首先说一下什么是java集合框架,相信初学者刚开始听这个的时候,对于这个东西的概念是很模糊的。下面我用通俗...

qq_37792173
2017/09/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

分页查询

一、配置 /*** @author beth* @data 2019-10-14 20:01*/@Configurationpublic class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor(){ ......

一个yuanbeth
20分钟前
2
0
在LINQPad中使用Ignite.NET

LINQPad是进行.NET开发的一款优秀工具,非常有利于Ignite.NET API的快速入门。 入门 下载LINQPad:linqpad.net/Download.aspx,注意要选择64位操作系统的AnyCPU版本; 安装Ignite.NET的NuGet...

李玉珏
33分钟前
2
0
JS其他类型值转化为Boolean类型规则

本文转载于:专业的前端网站➤JS其他类型值转化为Boolean类型规则 由于最近在笔试的时候,发现好多关于其他类型转化为Boolean类型的题目,因此总结一下! 一、String类型转化为Boolean 1.转化...

前端老手
44分钟前
4
0
EurekaClient自动装配及启动流程解析

在上篇文章中,我们简单介绍了EurekaServer自动装配及启动流程解析,本篇文章则继续研究EurekaClient的相关代码 老规矩,先看spring.factories文件,其中引入了一个配置类EurekaDiscoveryClie...

Java学习录
50分钟前
9
0
析构函数是否必须为虚函数?为何?

p517 在C++中,基类指针可以指向一个派生类的对象。如果基类的析构函数不是虚函数,当需要delete这个指向派生类的基类指针时,就只会调用基类的析构函数,而派生类的析构函数无法被调用。容易...

天王盖地虎626
51分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部