java容器(数组和集合)内元素的排序问题
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容器(数组和集合)内元素的排序问题的更多相关文章
- java中数组、集合、字符串之间的转换,以及用加强for循环遍历
java中数组.集合.字符串之间的转换,以及用加强for循环遍历: @Test public void testDemo5() { ArrayList<String> list = new ...
- C#不允许在foreach循环中改变数组或集合中元素的值(注:成员的值不受影响)
C#不允许在foreach循环中改变数组或集合中元素的值(注:成员的值不受影响),如以下代码将无法通过编译. foreach (int x in myArray) { x++; //错误代码,因为改变 ...
- java中数组以及集合
java中数组: 数组在Java里是一种特殊类型,有别于普通的“类的实例”的对象.但实际数组也是一种对象类型,int[]a = new int[5] a是在java栈中分配的引用变量,类型是int[ ...
- Java的数组,集合,数据结构,算法(一)
本人的愚见,博客是自己积累对外的输出,在学习初期或自己没有多少底料的情况下,与其总结写博客不如默默去搞自己的代码,但是学到集合这一块时,数组,集合,数据结构,算法这个概念搞的我比较混淆,所以不得已写这 ...
- java去除数组中重复的元素方法总结
/* * ArrayUnique.java * Version 1.0.0 * Created on 2017年12月16日 * Copyright ReYo.Cn */ package reyo.s ...
- java的数组index[]方括号内是可以进行算数运算的
java的数组index[]方括号内饰可以进行算数运算的 如: String[] stringArray = testString.split("\\."); System.out ...
- Java中数组与集合的相互转换
数组与List的相互转换 List转数组:采用集合的toArray()方法 数组转List:采用Arrays的asList()方法 数组转换为集合 注意:在数组转集合的过程中,要注意是否使用了视图的方 ...
- Java中对List集合内的元素进行顺序、倒序、随机排序的示例代码
import java.util.Collections; import java.util.LinkedList; import java.util.List; public class Test ...
- (转载)Java中对List集合内的元素进行顺序、倒序、随机排序的示例代码
1 import java.util.Collections; 2 import java.util.LinkedList; 3 import java.util.List; 4 5 public c ...
随机推荐
- 【CSU 1803】2016
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1803 Solution: 考虑两个数x,y乘积%2016=0 x×y≡0(MOD 2016) x= ...
- RDA UMF进程 & UMF_IR.C 遥控处理
SIS架构图: SW Structure APP Event Flow :消息分发流程 UMF进程: int umf_main(int argc, char* argv[]) { umf_Init() ...
- Java源码——String
最近在研究java的源代码,但是由于自己英语水平有限,所以想使用中文注释的方式把源码里的方法全部重写 一遍,下面是楼主整理出来的一小部分.我把整体的项目托管到GitHub上了,欢迎大家前去交流学习. ...
- CodeForces 731B Coupons and Discounts (水题模拟)
题意:有n个队参加CCPC,然后有两种优惠方式,一种是一天买再次,一种是买两天,现在让你判断能不能找到一种方式,使得优惠不剩余. 析:直接模拟,如果本次是奇数,那么就得用第二种,作一个标记,再去计算下 ...
- MySQL 备份和恢复数据
备份指定数据库的全部表或指定表 mysqldump -u user -h localhost -p [password] db_name[ tbl_name[,tbl_name.......]]> ...
- bzoj 1709: [Usaco2007 Oct]Super Paintball超级弹珠【枚举】
k是1e5范围的,吗? 注意到n只有100,这意味着k去重之后之后n^2,也就是1e4! 然后就可以愉快的n^4枚举了,枚举每个格子,再枚举每个敌人,如果当前格子射不到敌人则退出,否则满足所有敌人则a ...
- bzoj3252攻略(线段树+dfs序)
3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 562 Solved: 238[Submit][Status][Discuss] D ...
- 整理 Xamarin.Forms - Plugins
Open Source Components for Xamarin Xamarin官方整理的一些开源组件,有需要可以先到这里找 GitHub: xamarin/XamarinComponents: ...
- 为什么前后端分离不利于seo
搜索引擎的基础爬虫的原理就是抓取你的url,然后获取你的html源代码并解析. 而你的页面通常用了vue等js的数据绑定机制来展示页面数据,爬虫获取到的html是你的模型页面而不是最终数据的渲染页面, ...
- hihocoder1365 图片排版
思路: 模拟,枚举,dp. 参考了https://github.com/buptlxb/hihoCoder/blob/master/solutions/1365/picture_arrange.cpp ...