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. xubuntu 17.04 和 iphone 6互传文件方法——使用libimobiledevice就可以像u盘一样操作文件了

    I need to preface this by saying I'm also new to Linux, but I've got it working I think. The instruc ...

  2. sql复杂查询语句总结

    转自:http://blog.csdn.net/fengfeng91/article/details/15029173 create table student( sno varchar2(10) p ...

  3. java运行jdk连接mysql出现了:Establishing SSL connection without server's identity verification is not recommended

    注意:出现这类提示也不会影响对数据库的增删改查操作,所以不用紧张.. 在运行练习时出现下面的错误信息提示: Establishing SSL connection without server's i ...

  4. [App Store Connect帮助]三、管理 App 和版本(6.3)转让 App:发起 App 转让

    在发起前,您需要接收者组织中“帐户持有人”的 Apple ID,并且满足 App 转让的条件.请前往 App 转让条件. 注:App 转让完成后,该 App 会从您的帐户中移除,因此,您应当备份该 A ...

  5. redis简介及常见问题

    目录 简介 特点 优点 高性能 高并发 为什么要用 redis 而不用 map/guava 做缓存? redis 和 memcached 的区别 Redis快的原因 为什么redis是单线程 为什么r ...

  6. 【js】为什么要使用react+redux

    前端的浪潮一叠叠袭来,带走了jQuery,带走了backbone,带来了react,带来了redux,但是面对层出不穷的前端技术,我们应该何去何从呢?近一年来笔者的也发生了同样的变化,技术栈从.net ...

  7. 通过路由器的IP映射来解决,两个不同IP地址的PC机之间的从LAN口到WAN口的单向通讯问题

    1.问题假设: 在B机中IP地址与子网掩码都固定,网关是路由器的LAN口的IP地址,我们希望通过路由器来实现B机与A机之间的单向通讯问题,也就是说B可以ping通A且可以访问A提供的FTP站点. 2. ...

  8. Spring 侵入式和非侵入式

    1.非侵入式的技术体现 允许在应用系统中自由选择和组装Spring框架的各个功能模块,并且不强制要求应用系统的类必须从Spring框架的系统API的某个类来继承或者实现某个接口. 2.如何实现非侵入式 ...

  9. Axis通过wsdd部署Web Service

    axis网上的教程很多,不过搜来搜去,总是只有那么几篇.仔细看了一下那几篇文章,都感觉到不是自己想要的,所以自己整理了一篇分享一下. 本文介绍axis应用的一个小例子,没有麻烦的命令行操作,只需照下面 ...

  10. 386 Lexicographical Numbers 字典序排数

    给定一个整数 n, 返回从 1 到 n 的字典顺序.例如,给定 n =1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] .请尽可能的优化算法的时间复杂度和空间复杂度. 输入 ...