package cn.learn.collection.Collections;
/*
排序的对象的类,实现comparable借口,重写compareto方法
若要打印必须重写toString方法,会默认调用
*/
public class Person implements Comparable<Person>{
private String name;
private int age; @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
} public Person() {
} public Person(String name, int age) {
this.name = name;
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} //重写排序方法
@Override
public int compareTo(Person o) {
return this.getAge() - o.getAge();//年龄升序排序
//return 0;//认为元素都是相同的
}
}
 package cn.learn.collection.Collections;

 import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator; /*
java.util.Collections是集合工具类 注意:sort(List<T> list)使用前提
被排序的集合里面存储的元素,若不符合java里面自带的方法,是自定义类型
需要在一般是生成对象的类中
实现Comparable,重写Compareto定义排序规则
o - this 降序 sort(List<E>,Comparator<? super T>)
Comparable与Comparator的区别
Comparable:自己(this)和别人(参数)比较,需要自己在类中重写comparTo方法
Comparator:相当于找一个第三方的裁判,比较两个 ,是一个接口 ,重写内部类 */
public class CollectionsApi {
public static void main(String[] args) {
ArrayList<Integer> num = new ArrayList<>();
num.add(5);
num.add(8);
num.add(7);
num.add(27);
//太麻烦,可以用集合工具类,添加多个元素,返回的是Boolean值
Collections.addAll(num,5,6,8,12);
System.out.println(num);//[5, 8, 7, 27, 5, 6, 8, 12] //shuffle(弄混)方法,打乱集合顺序
Collections.shuffle(num);
System.out.println(num); //[8, 12, 27, 5, 5, 7, 6, 8] //sort集合排序,默认升序
Collections.sort(num);
System.out.println(num); //[5, 5, 6, 7, 8, 8, 12, 27] //如果不是字符和整数,对对象进行排序,需要重写排序方法
//根据年龄进行升序排序
ArrayList<Person> people=new ArrayList<>();
people.add(new Person("ap",12));
people.add(new Person("nha",16));
people.add(new Person("nihp",10));
people.add(new Person("hp",10));
Collections.sort(people); //排序
System.out.println(people); //sort(List<E>,Comparator<? super T>)
Collections.sort(people, new Comparator<Person>() {
//重写比较规则,降序
@Override
public int compare(Person o1, Person o2) {
//如果年龄一样,比较名字长度升序,年龄降序
int age= o2.getAge() - o1.getAge();
if(age == 0){
age=o1.getName().length()-o2.getName().length();
}
return age;
}
});
System.out.println(people); }
}

Collections -集合排序compareTo方法重写,shuffle,addall的更多相关文章

  1. List集合排序的方法

    1.list集合中的对象实现Comparable接口 public class User implements Comparable<User>{ private Integer id; ...

  2. 关于自定义 List集合排序的方法!

    大致流程: 排序是用到排序的接口Comparator<T>你要先建一个类实现比较器Comparator //大致流程public class StuComp implements Comp ...

  3. Java连载88-HashSet集合与hashCode方法重写

    一.Set集合 1.HashSet底层实际上是一个HashMap,HashMap底层采用了哈希表数据结构. 2.哈希表又称为散列表,哈希表底层是一个数组,这个数组中每一个元素是一个单向链表,每个单向链 ...

  4. JS 对Array集合排序的方法

    我的业务是根据距离的远近经行一个排序: 第一种方法:冒泡排序 排序前的数据是这样子的: 排序后是这样子的: 代码可以直接复制使用的: <!doctype html> <html> ...

  5. 使用 Collections 实现排序 sort方法 对List 实体类实现Comparable类 示例

    package com.test.jj; import java.util.ArrayList; import java.util.Collections; public class Test { A ...

  6. Java中List集合排序的方法 比较器的使用 根据学生对象数学 语文 英语成绩总和进行sort排序

    package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Compar ...

  7. java 集合框架(TreeSet操作,自动对数据进行排序,重写CompareTo方法)

    /*TreeSet * treeSet存入数据后自动调用元素的compareTo(Object obj) 方法,自动对数据进行排序 * 所以输出的数据是经过排序的数据 * 注:compareTo方法返 ...

  8. TreeSet集合的自然排序与比较器排序、Comparable接口的compareTo()方法

    [自然排序] package com.hxl; public class Student implements Comparable<Student> { private String n ...

  9. Java自定义排序:继承Comparable接口,重写compareTo方法(排序规则)

    代码: 1 import java.util.*; 2 3 /** 4 * 学习自定义排序:继承Comparable接口,重写compareTo方法(排序规则). 5 * TreeMap容器的Key是 ...

随机推荐

  1. ofbiz16.11.04(环境搭建)

    ofbiz16.11.04(环境搭建) 版本说明: ofbiz 16.11.04 下载地址:http://ofbiz.apache.org/download.html gradle 4.9 下载地址: ...

  2. Vue.js——60分钟快速入门 一

    来源:https://www.cnblogs.com/keepfool/p/5619070.html Vue.js介绍 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组 ...

  3. Linux性能优化从入门到实战:04 CPU篇:CPU使用率

      CPU使用率是单位时间内CPU使用情况的统计,以百分比方式展示. $ top top - 11:46:45 up 7 days, 11:52, 1 user, load average: 0.00 ...

  4. ELK windows下部署测试

    操作系统 win7 (当时想在linux下部署,虚拟内存过小,转而在windows下) 版本说明 elasticsearch-6.6.2  (elasticsearch-head-master插件) ...

  5. 线程中sleep和wait方法的区别

    sleep() 方法: 线程主动放弃CPU,使得线程在指定的时间内进入阻塞状态,不能得到CPU 时间,指定的时间一过,线程重新进入可执行状态.典型地,sleep()被用在等待某个资源就绪的情形:测试发 ...

  6. rocketmq架构设计

    # 架构设计 1 技术架构 RocketMQ架构上主要分为四部分,如上图所示: Producer:消息发布的角色,支持分布式集群方式部署.Producer通过MQ的负载均衡模块选择相应的Broker集 ...

  7. 使用vue进行国际化

    相对于网站等一些需求 我们有需要做国际化的需求,具体步骤如下: 首先安装 vue-i18n npm install vue-i18n import VueI18n from 'vue-i18n' Vu ...

  8. 父工程 pom版本

    <!-- 集中定义依赖版本号 --> <properties> <junit.version>4.12</junit.version> <spri ...

  9. CentOS下安装Chrome浏览器

    1. 下载安装脚本, 在下载目录中,执行以下命令,将安装脚本下载到本地 wget https://intoli.com/install-google-chrome.sh 2.然后授予可执行权限 chm ...

  10. win7 开机,或重启自动启动 该文件下的

    win7 开机,或重启自动启动 该文件下的: 把桌面上快捷键放入文件内就行 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start ...