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. SSM商城系统开发笔记-问题01-通配符的匹配很全面, 但无法找到元素 'mvc:annotation-driven' 的声明。

    配置搭建完后进行Post请求测试时报错: Caused by: org.xml.sax.SAXParseException; lineNumber: 14; columnNumber: 29; cvc ...

  2. vue函数防抖和节流

    Vue函数防抖和节流https://zhuanlan.zhihu.com/p/72363385 <template> <div> <input type='text' v ...

  3. css文档之盒模型阅读笔记

    前段时间抽空仔细阅读了w3c的css文档关于盒模型方面的一些基础知识.边读边记录了一些要点,在此做些整理,与大家分享,如有理解有误之处,请不吝指教. 1.综述 文档中的每个元素被描绘为矩形盒子.渲染引 ...

  4. 构建LNMP+memcached服务

    通过PHP页面实现对memcached服务器的数据操作,实现以下目标: - 为PHP安装memcache扩展 - 创建PHP页面,并编写PHP代码,实现对memcached的数据操作 环境:部署LNM ...

  5. UNIX网络编程总结四

    socket: 为了执行网络I/O,一个进程做的第一件事就是调用socket函数. family指明协议族,type指明类型,除非在原始套接口,protocol一般为0,并非所有的family,typ ...

  6. bzoj4009 [HNOI2015]接水果 整体二分+扫描线+树状数组+dfs序

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4009 题解 考虑怎样的情况就会有一个链覆盖另一个链. 设被覆盖的链为 \(a - b\),覆盖 ...

  7. python的list拷贝

    有三种情况 第一种:赋值(不是拷贝) a=[1,2,3] b=a 这种不是拷贝,a和b是一个变量,内存是一个 第二种:浅拷贝 a=[1,2,3,[4,5,6]] b=a b的第一层是独立的,第二层会更 ...

  8. DGA域名检测

    一.DGA域名原理 僵尸网络(Botnet):互联网上在蠕虫.木马.后门工具等,传统恶意代码形态的基础上发展.融合而产生的一种新型攻击方法. DNS(Domain Name System) :基于 U ...

  9. 程序猿看了要xiao了

    一. 程序猿问科比:“你为什么这么成功? ”科比:“你知道洛杉矶凌晨四点是什么样子吗? ”程序猿:“知道,一般那个时候我还在写代码,怎么了?”科比:“额…….” 二. 女神:你能让这个论坛的人都吵起来 ...

  10. 让Flash内心崩溃的HTML5历史

    对于HTML5,在今天这个互联网时代,大部分人应该至少都听说过这个名字,或许很多人对HTML5的了解都起于一句话:FLASH杀手. HTML5其实早已不是什么新鲜的事物了,其最初的雏形早在2004年就 ...