package com.janson.day20180827;

import java.util.*;

/**
* java中容器内对象的排序可以通过Collections.sort()和Arrays.sort()两种方法实现
* 但用以上两种方法有一个前提就是被排序的对象应该是支持排序的或可以比较的
* 所以被排序的对象必须实现comparable接口或Comparator接口
* comparable接口是排序接口,若一个类实现了该接口,就意味着该类支持排序
* comparator接口是比较接口,我们如果要控制某个类的次序,而该类本身不支持排序(即没有实现comparable接口),那么就可以建立一个“该类的比较器”来进行排序
*/
public class TestCompare {
public static void main(String[] args) {
/*
*测试Person类排序
*/
Person p1 = new Person("张三","男",30);
Person p2 = new Person("李四","女",25);
Person p3 = new Person("王五","女",28);
Person[] p = new Person[3];
p[0] = p1;
p[1] = p2;
p[2] = p3;
System.out.println("Person排序前:");
for (Person person : p) {
System.out.println(person.getName() + "," + person.getSex() + "," + person.getAge());
}
//Arrays.sort(p); //当被比较的对象没有实现排序接口或比较接口时,调用该方法就会失败 /*
* 测试Panda类排序
*/
Panda[] panda = new Panda[]{new Panda("P1","man",10), new Panda("P2","female",15),new Panda("P3","man",6)};
//Panda[] panda = {new Panda("P1","man",10), new Panda("P2","female",15),new Panda("P3","man",6)};
System.out.println("Panda排序前:");
for (Panda pa : panda) {
System.out.println(pa.getName() + "," + pa.getSex() + "," + pa.getAge());
}
Arrays.sort(panda);
System.out.println("Panda排序后:");
for (Panda pa : panda) {
System.out.println(pa.getName() + "," + pa.getSex() + "," + pa.getAge());
} /*
* 测试Dog类排序
*/
List<Dog> dogList = new ArrayList<>();
dogList.add(new Dog("D1","M",20));
dogList.add(new Dog("D2","F",18));
dogList.add(new Dog("D3","M",16));
System.out.println("Dog排序前:");
for (Dog d : dogList) {
System.out.println(d.getName() + "," + d.getSex() + "," + d.getAge());
}
Collections.sort(dogList,new DogComparator()); //用我们写好的DogComparator对Dog进行排序
System.out.println("Dog排序后:");
for (Dog d : dogList) {
System.out.println(d.getName() + "," + d.getSex() + "," + d.getAge());
}
}
} /**
* Person类没有实现排序接口或比较接口
*/ class Person {
private String name;
private String sex;
private int age; Person(String name,String sex,int age){
this.name = name;
this.sex = sex;
this.age = age;
} String getName() {
return name;
} String getSex() {
return sex;
} int getAge() {
return age;
}
} /**
* Cat类实现了comparable排序接口
*/ class Panda implements Comparable<Panda>{
private String name;
private String sex;
private int age; Panda(String name,String sex,int age){
this.name = name;
this.sex = sex;
this.age = age;
} String getName() {
return name;
} String getSex() {
return sex;
} int getAge() {
return age;
} @Override
public int compareTo(Panda p) {
return this.getAge() - p.getAge();
}
} /**
* Dog类
*/ class Dog {
private String name;
private String sex;
private int age; Dog(String name,String sex,int age){
this.name = name;
this.sex = sex;
this.age = age;
} String getName() {
return name;
} String getSex() {
return sex;
} int getAge() {
return age;
} } /**
* 定义一个DogComparator类实现了comparator比较接口
*/
class DogComparator implements Comparator<Dog> {
@Override
public int compare(Dog o1, Dog o2) {
return o1.getAge() - o2.getAge();
}

java容器(数组和集合)内元素的排序问题的更多相关文章

  1. java中数组、集合、字符串之间的转换,以及用加强for循环遍历

    java中数组.集合.字符串之间的转换,以及用加强for循环遍历: @Test public void testDemo5() { ArrayList<String> list = new ...

  2. C#不允许在foreach循环中改变数组或集合中元素的值(注:成员的值不受影响)

    C#不允许在foreach循环中改变数组或集合中元素的值(注:成员的值不受影响),如以下代码将无法通过编译. foreach (int x in myArray) { x++; //错误代码,因为改变 ...

  3. java中数组以及集合

    java中数组: 数组在Java里是一种特殊类型,有别于普通的“类的实例”的对象.但实际数组也是一种对象类型,int[]a = new int[5]  a是在java栈中分配的引用变量,类型是int[ ...

  4. Java的数组,集合,数据结构,算法(一)

    本人的愚见,博客是自己积累对外的输出,在学习初期或自己没有多少底料的情况下,与其总结写博客不如默默去搞自己的代码,但是学到集合这一块时,数组,集合,数据结构,算法这个概念搞的我比较混淆,所以不得已写这 ...

  5. java去除数组中重复的元素方法总结

    /* * ArrayUnique.java * Version 1.0.0 * Created on 2017年12月16日 * Copyright ReYo.Cn */ package reyo.s ...

  6. java的数组index[]方括号内是可以进行算数运算的

    java的数组index[]方括号内饰可以进行算数运算的 如: String[] stringArray = testString.split("\\."); System.out ...

  7. Java中数组与集合的相互转换

    数组与List的相互转换 List转数组:采用集合的toArray()方法 数组转List:采用Arrays的asList()方法 数组转换为集合 注意:在数组转集合的过程中,要注意是否使用了视图的方 ...

  8. Java中对List集合内的元素进行顺序、倒序、随机排序的示例代码

    import java.util.Collections; import java.util.LinkedList; import java.util.List; public class Test ...

  9. (转载)Java中对List集合内的元素进行顺序、倒序、随机排序的示例代码

    1 import java.util.Collections; 2 import java.util.LinkedList; 3 import java.util.List; 4 5 public c ...

随机推荐

  1. C语言8大经典排序算法(2)

    二.插入类排序 插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止. 插入排序一般意义上有两 ...

  2. bzoj1047

    二维单调队列 rmq很明显会超时,如果这个序列是一维的,很明显就是个单调队列,现在就是把一维的单调队列转换为二维单调队列. 先求出每一列的窗口极值,然后对于每一行做单调队列,值就是之前求出每个位置结尾 ...

  3. 使用HttpClient MultipartEntityBuilder 上传文件,并解决中文文件名乱码问题

    遇到一种业务场景,前端上传的文件需要经过java服务转发至文件服务.期间遇到了原生HttpClient怎么使用的问题.怎么把MultipartFile怎么重新组装成Http请求发送出去的问题.文件中文 ...

  4. “ResGen.exe”已退出,代码为 -1073741701 或 “ResGen.exe”已退出,代码为 2。

    解决的办法如下: 1.关闭所有Visual Studio: 2.以管理员的身份打开命令提示窗口:(开始-运行-cmd) 3.更改目录至"CD C:\Program Files (x86)\M ...

  5. 理解C#泛型(转)

    理解C#泛型 http://www.cnblogs.com/wilber2013/p/4292240.html 泛型中的类型约束和类型推断 http://www.cnblogs.com/wilber2 ...

  6. js 本地存储 localStorage 之 angular

    今天项目中用到 php yii框架 用的不是 angular路由 所以用rootScope传值是不行的 我就用到了 localStorage 本地持久化存储 如下 set 顾名思义是设置 值 loca ...

  7. 树形DP Gym 100496H House of Representatives

    题目传送门 /* 题意:寻找一个根节点,求min f(u) = ∑ρ(v, u) * p(v).ρ(v, u)是u到v的距离,p(v)是v点的权值 树形DP:先从1出发遍历第一次,sum[u]计算u到 ...

  8. 模拟 HDOJ 4552 Running Rabbits

    题目传送门 /* 模拟:看懂题意,主要是碰壁后的转向,笔误2次 */ #include <cstdio> #include <algorithm> #include <c ...

  9. Python安装第三方包(setup.py)

    在github上下载了records文件到本地. 解压文件 cmd切换到文件setup.py的目录下 先执行 python setup.py build 再执行python setup.py inst ...

  10. 387 First Unique Character in a String 字符串中的第一个唯一字符

    给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1.案例:s = "leetcode"返回 0.s = "loveleetcode&qu ...