本文主要介绍Java集合排序,通过实例代码非常详细的介绍,对大家的学习或者工作有一定的参考价值。有需要的朋友下面和边肖一起学习。
一、集合排序概述
1、主要内容
对集合中的基本数据类型进行排序。
对集合中的字符串排序
比较器接口
可比接口
回顾:
//数组的排序
int[] arr={2,3,4,5,2,1 };
数组. sort(arr);
2、集合排序方法
使用Collections类的sort(List list)方法。
Sort(List list)是按照元素的自然顺序对指定的列表进行升序排序。
二、对基本数据类型和字符串类型进行排序
1、对基本数据类型排序
列表中只能存储对象。如果要存储基本数据类型,只能在泛型中编写它们对应的包装类。
导入Java . util . ArrayList;
导入Java . util . collections;
导入Java . util . list;
公共类IntSort {
公共静态void main(String[] args) {
//对存储在列表中的整形数据进行排序
list integer list=new ArrayListInteger();
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();
//对列表中的数据进行排序
collections . sort(list);
System.out.println('排序后:');
for (int n: list) {
system . out . print(n ' ');
}
}
}
2、对字符串排序
集合中的字符串实际上是按照字符顺序和ASCII值顺序排序的。
导入Java . util . ArrayList;
导入Java . util . collections;
导入Java . util . list;
公共类StringSort {
公共静态void main(String[] args) {
//对存储在列表中的字符串进行排序。
ListString list=new ArrayList string();
list . add(' orange ');
list . add(' blue ');
list.add('黄色');
list . add(' gray ');
System.out.println('排序前:');
for (String str: list) {
system . out . print(str ' ');
}
system . out . println();
//对列表中的数据进行排序
collections . sort(list);
System.out.println('排序后:');
for (String str: list) {
system . out . print(str ' ');
}
//排序后,其实是按字母顺序。
}
}
三、Comparator接口
1、问题场景:
如何对自定义类进行排序?
2、解决方法:
使用可比或比较器接口。
3、Comparator接口介绍
强制将对象作为一个整体进行排序的比较函数。
您可以将比较器传递给排序方法(如Collections.sort或Arrays.sort)。
int compare(T o1,T o2)方法用于比较两个参数进行排序如果o1o2,则返回负整数如果o1==o2,则返回0如果o1o2,则返回正整数。
包含方法boolean equals(Object obj)是为了表明某个其他对象是否“等于”这个比较器。这个方法可以被Object类中的equals方法覆盖,所以它不必被覆盖。也就是说,我们只需要在比较器接口中重写compare方法。
4、对宠物猫进行排序
根据特定规则对自定义类别进行排序:
(1)按名字给宠物猫分类
类型字符串具有compareTo()方法。
示例:
int n=name 1 . con Pareto(name 2);
如果name1name2,则n为负整数,如果相等,则为0,否则为正整数。
如果名称1和名称2的位置发生变化,将按相反的顺序排序。
导入Java . util . comparator;
//按名称升序排列的比较器
公共类名Comparator实现ComparatorCat {
@覆盖
公共int比较(类别o1、类别o2) {
//按名称升序排序
string name 1=O1 . getname();
string name 2=O2 . getname();
int n=name 1 . compare to(name 2);
返回n;
}
}
语法格式:
Collections.sort(catList,new name comparator());
(2)按年龄降序排列宠物猫。
当调用compare方法大于0时,前一个数与下一个数交换,即把大的数放在后面,称为升序。如果第二个参数与第一个参数相反,则按降序排列。
按int类型比较,直接返回减法后的差。
导入Java . util . comparator;
//按年龄降序排列的比较器
公共类AgeComparator实现ComparatorCat {
@覆盖
公共int比较(类别o1、类别o2) {
int age 1=O1 . getmonth();
int age 2=O2 . getmonth();
返回age 2-age 1;
}
}
语法格式:
Collections.sort(catList,new age comparator());
四、Comparable接口
1、Comparable概述
可比接口位于Java.lang包下。
该接口强制实现其每个类的对象的整体排序。
这种排序叫做类的自然排序,类的compareTo方法叫做它的自然比较方法。
对于集合,通过调用Collection.sort方法对它们进行排序。
对于数组,通过调用Arrays.sort方法对它们进行排序。
Int compareTo(T o)方法:如果对象小于、等于或大于指定对象,则分别返回负整数、0或正整数。
2、对商品价格进行降序排序案例
(1)操作步骤
实现要排序的类的接口。
重写compareTo方法
直接调用Collections.sort()方法。
(2)代码实现
商品类别的定义
Class goods实现Comparable goods {//实现Comparable接口,并使用泛型来限定比较的类型。
私有字符串id;//商品编号
私有字符串名称;//商品名称
私人双倍价格;//商品价格
//构造方法
公共产品(){
}
公共商品(字符串id,字符串名称,双价格){
this . setid(id);
this.setName(名称);
this.setPrice(价格);
}
//getter和setter方法
公共字符串getId() {
返回id;
}
公共void setId(字符串id) {
this.id=id
}
公共字符串getName() {
返回名称;
}
public void setName(字符串名){
this.name=name
}
public double getPrice() {
退货价格;
}
公共无效定价(双倍价格){
this.price=价格;
}
@覆盖
公共字符串toString() {
退货'商品编号:' id ',商品名称:' name ',商品价格:' price;
}
@覆盖
public compareTo(goods o){//重写compare to方法。
//取出商品价格
double price 1=this . getprice();
double price 2=o . getprice();
int n=new Double(price2 - price1)。int value();//双精度型差值转换成int
返回n;
}
分拣步骤
collections . sort(goods list);
五、集合排序总结
比较器和可比接口之间的差异
1、Comparator:
位于java.util包中
在要比较的类之外实现接口。
调用sort方法时,指定比较器的实现类。
使用顺序:
实现接口进行排序。
实现比较器接口
试验
2、Comparable
位于java.lang包中
在要比较的类上实现接口。
调用排序方法时,只需指定集合名称即可。
使用顺序:
定义要比较的类并实现comparable接口。
试验
以上是边肖介绍的Java集合的详细讲解和集成。希望对你有帮助。如果您有任何问题,请给我留言,边肖将及时回复您。非常感谢您对我们网站的支持!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。