Java常用——集合排序

Java常用——集合排序
1、主要内容

集合中的基本数据类型排序
集合中的字符串排序
Comparator接口
Comparable接口

2、集合排序方法

使用Collections类的sort(List list)方法
sort(List list)是根据元素的自然顺序对指定列表按升序进行排序。
二、对基本数据类型和字符串类型进行排序

1、对基本数据类型排序

List中只能存放对象,要想存放基本数据类型的话,泛型中只能写其对应的包装类。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class IntSort {

public static void main(String[] args) {
	//对存储在List中的整形数据进行排序
	List<Integer> list = new ArrayList<Integer>();
	list.add(5);
	list.add(9);
	list.add(3);
	list.add(1);
	System.out.println("排序前:");
	for (int n: list) {
		System.out.print(n + " ");
	}
	System.out.println();
	//对List中的数据进行排序
	Collections.sort(list);
	System.out.println("排序后:");
	for (int n: list) {
		System.out.print(n + " ");
	}
}

}

2、对字符串排序

集合中字符串的排序后其实是按字符顺序,ASCII值顺序进行排序的
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class StringSort {

public static void main(String[] args) {
	//对存放在List中的字符串进行排序。
	List<String> list = new ArrayList<String>();
	list.add("orange");
	list.add("blue");
	list.add("yellow");
	list.add("gray");
	System.out.println("排序前: ");
	for (String str: list) {
		System.out.print(str + " ");
	}
	System.out.println();
	//对List中的数据进行排序
	Collections.sort(list);
	System.out.println("排序后: ");
	for (String str: list) {
		System.out.print(str + " ");
	}
	//排序后其实是按字母顺序
}

}

三、Comparator接口

1、问题场景:

自定义的类如何排序?

2、解决方法:

使用Comparable或Comparator接口

3、Comparator接口介绍

强行对某个对象进行整体排序的比较函数
可以将Comparator传递给sort方法(如Collections.sort或 Arrays.sort)
包含方法int compare(T o1, T o2) 比较用来排序的两个参数
–如果o1<o2,返回负整数
–如果o1==o2,返回0
–如果o1>o2,返回正整数
包含方法boolean equals(Object obj)指示某个其他对象是否“等于”此Comparator。此方法可以被Object类中的equals方法覆盖,不必重写,也就是说,我们在Comparator接口中只需要重写compare这个方法。
4、对宠物猫进行排序

对自定义的类按照一定的规则进行排序:
(1)对宠物猫按名字进行排序
String类型具有compareTo()方法
例:

int n = name1.conpareTo(name2);
1
如果name1<name2时,那么n是负整数,相等则为0,否则为正整数。
name1与name2位置调换下,则会实现倒序的排序。

import java.util.Comparator;
//按名字进行升序排序的比较器
public class NameComparator implements Comparator {

@Override
public int compare(Cat o1, Cat o2) {
	//按名字升序排序
	String name1 = o1.getName();
	String name2 = o2.getName();
	int n = name1.compareTo(name2);
	return n;
}

}

语法格式:

Collections.sort(catList, new NameComparator());

(2)对宠物猫按年龄降序排序

调用compare方法大于0,就把前一个数和后一个数交换,也就是把大的数放后面了,即所谓的升序了。如果第二个参数与第一个参数调换顺序,也就是降序了。
按int类型比较,直接返回减法后的差值。
import java.util.Comparator;
//按年龄进行降序排序的比较器
public class AgeComparator implements Comparator {

@Override
public int compare(Cat o1, Cat o2) {
	int age1 = o1.getMonth();
	int age2 = o2.getMonth();
	return age2 - age1;
}

}

语法格式:

Collections.sort(catList, new AgeComparator());

四、Comparable接口

1、Comparable概述

Comparable接口位于Java.lang包下面
此接口强行对实现他的每个类的对象进行整体排序
这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法
对于集合,通过调用Collection.sort方法进行排序
对于数组,通过调用Arrays.sort方法进行排序
int compareTo(T o)方法:
该对象小于,等于或大于指定对象,则分别返回负整数,0,或正整数
2、对商品价格进行降序排序案例

(1)操作步骤

对待排序的类进行接口实现
重写compareTo方法
直接调用Collections.sort()方法。
(2)代码实现
①商品类的定义

public class Goods implements Comparable { //实现Comparable接口,利用泛型限定比较的类型
private String id; //商品编号
private String name; //商品名称
private double price; //商品价格
//构造方法
public Goods() {

}
public Goods(String id, String name, double price) {
	this.setId(id);
	this.setName(name);
	this.setPrice(price);
}

//getter和setter方法
public String getId() {
	return id;
}
public void setId(String id) {
	this.id = id;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public double getPrice() {
	return price;
}
public void setPrice(double price) {
	this.price = price;
}


@Override
public String toString() {
	return "商品编号:" + id + ",商品名称:" + name + ",商品价格:" + price;
}

@Override
public int compareTo(Goods o) {     //重写compareTo方法。
	//取出商品价格
	double price1 = this.getPrice();
	double price2 = o.getPrice();
	int n = new Double(price2 - price1).intValue();     //double类型的差值转为int
	return n;
}

②排序步骤

Collections.sort(goodsList);

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值