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. [NOI2004]小H的小屋 贪心

    神仙贪心,洛谷没有插图导致我题一开始都没看懂.容易发现,块越多越优秀,然后为了满足题意,所以假如不能整除,就分为两个部分(能整除就直接均分就行了).前一部分是n/m,后一部分是n/m+1.数量也是固定 ...

  2. Java 泛型 一

    泛型在Java中有很重要的地位,网上很多文章罗列各种理论,不便于理解,本篇将立足于代码介绍.总结了关于泛型的知识. 先看下面的代码: List list = new ArrayList(); list ...

  3. openstack dnsmasq调试

  4. apache相关补充

    apache相关补充 sendfile机制 1)不用sendfile的传统网络传输过程: read(file, tmp_buf, len) write(socket, tmp_buf, len) 2) ...

  5. bzoj 2091: [Poi2010]The Minima Game【博弈论+贪心+dp】

    不知道算不算博弈 很妙的贪心,一直在想SG函数结果... 首先从大到小排个序,然后考虑当前的人要怎么选:如果不选最后一段,那么另一人会选,这样不利于当前的人,所以每个人一定会选最后一段 设f[i]为要 ...

  6. 洛谷P1010 幂次方

    题目描述 任何一个正整数都可以用2的幂次方表示.例如 137=2^7+2^3+2^0 同时约定方次用括号来表示,即a^b 可表示为a(b). 由此可知,137137可表示为: 2(7)+2(3)+2( ...

  7. liunx 用户切换 su sudo

    liunx 用户操作#useradd test#passwd test 用户身份切换su 切换用户 需要知道切换用户的密码1.su [-lm] [-c命令] [username] #su -login ...

  8. [转]c 语言中 %d,%lu等区别

    转载至:http://blog.sina.com.cn/s/blog_7d94c35c01019f96.html %d 有符号10进制整数 %ld 长整型 %hd短整型 %hu 无符号短整形 %u无符 ...

  9. Bryce1010 Acm模板

    目录 STL标准模板库 STL简介 STL pair STL set STL vector STL string STL stack STL queue STL map upper_bound和low ...

  10. leetcode264 Ugly Number II

    思路: 新生成的数字一定是原来的某个数字乘以2.3或5,为了得到最小的一个,需要用三个指针记录原数字的位置以供比较.为了避免重复,生成新数字以后,原数字对应的指针需要后移一下. 实现: class S ...