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. VS-按F12无法跳转到函数定义,点击右键也无法跳转

    工具->选项->项目和解决方案->常规,把“在解决方案资源管理器中跟踪活动项”反选.

  2. shell脚本自动更新git

    gitpull.sh #!/bin/bash cd /home/wwwroot/default/mouse && git pull cd /home/wwwroot/default/s ...

  3. [Codeforces 425A] Sereja and Swaps

    [题目链接] https://codeforces.com/contest/425/problem/A [算法] 枚举最终序列的左端点和右端点 , 尝试用这段区间中小的数与区间外大的数交换 时间复杂度 ...

  4. luogu3942将军令

    https://www.zybuluo.com/ysner/note/1302132 题面 在大小为\(n\)的树上选择尽量少的点,使得所有未选择的点距离选择了的点小于等于\(k\). \(n\leq ...

  5. [noip模拟赛]bird

    https://www.zybuluo.com/ysner/note/1295414 题面 \(R\)是一个猎人,他准备打猎,他站在平面直角坐标系的\((0,0)\)位置. 天上有\(n\)只小鸟从右 ...

  6. [入门帮助] Kafka入门经典教程

    问题导读 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic.发送消息.消费消息?3.如何书写Kafka程序?4.数据传输的事务定义有哪三种?5.Kafka判断一个节点是否活着有 ...

  7. DNS中的AC、rndc、智能DNS解析和基础排错

    bind中的ACL和rndc DNS除了服务器外,还具有一些访问控制和视图功能. 访问控制是指仅对定义的网络进行解析,视图也就是智能解析. 1>访问控制是通过acl函数来实现的,acl把一个或多 ...

  8. 51nod1459 迷宫游戏

    1459 迷宫游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 你来到一个迷宫前.该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,你 ...

  9. 转 MySQL数据库基础

    http://lib.csdn.net/article/mysql/57883 1 数据库基础 一.数据库与数据库管理系统 1.数据库(DB):存放数据的仓库,从广义来说,数据不仅包括数字,还包括了文 ...

  10. 6.12mysql自己的数据库的作用