int[] arr= {1,2,3,4,5,1};
Arrays.sort(arr);
使用Collections
类的sort()
方法;
sort(List
:根据元素的自然顺序指定列表按升序进行排序。
public class IntSort {
public static void main(String[] args) {
// 对存储在List中的整型数据进行排序
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(9);
list.add(0);
list.add(2);
System.out.println("排序前:");
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");
}
System.out.println();
Collections.sort(list);
System.out.println("排序后:");
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");
}
}
}
输出:
排序前:
1 9 0 2
排序后:
0 1 2 9
根据ASCII码进行排序。
public static void main(String[] args) {
// 对存储在List中的整型数据进行排序
List<String> list = new ArrayList<String>();
list.add("2");
list.add("1");
list.add("a");
list.add("JAVA");
System.out.println("排序前:");
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");
}
System.out.println();
Collections.sort(list);
System.out.println("排序后:");
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");
}
}
输出:
排序前:
2 1 a JAVA
排序后:
1 2 JAVA a
在Java.util
包下。
Comparator
传递给sort
方法(如Collections.sort
或Arrays.sort
)int compare(T o1,T o2 )
,比较用来排序的两个参数:o1boolean equals(Object obj)
指示某个其他对象是否“等于”此Comparator
:此方法可以被Object
类中的equals
方法覆盖,不必重写核心代码:Collections.sort(list,new NameComparator());
按名字升序
代码:“名字比较器”的类,实现Comparator这个接口
//定义一个“名字比较器”的类,它实现了Comparator这个接口
public class NameComparator implements Comparator<Cat> {
@Override
public int compare(Cat o1, Cat o2) {
String name1 = o1.getName();
String name2 = o2.getName();
int n = name1.compareTo(name2);
return n;
}
}
代码:测试类
public static void main(String[] args) {
// 按名字升序排序
Cat hua = new Cat("huahua", 5, "英短");
Cat fan = new Cat("fanfan", 2, "狸花");
Cat mao = new Cat("maomao", 3, "中华田园猫");
List<Cat> list = new ArrayList<Cat>();
list.add(hua);
list.add(fan);
list.add(mao);
// 排序前
System.out.println("排序前:");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).toString());
}
System.out.println();
// 按名字升序排序——排序后
Collections.sort(list, new NameComparator());
System.out.println("排序后:");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).toString());
}
System.out.println();
}
输出:
排序前:
[姓名=huahua, 年龄=5, 品种=英短]
[姓名=fanfan, 年龄=2, 品种=狸花]
[姓名=maomao, 年龄=3, 品种=中华田园猫]
排序后:
[姓名=fanfan, 年龄=2, 品种=狸花]
[姓名=huahua, 年龄=5, 品种=英短]
[姓名=maomao, 年龄=3, 品种=中华田园猫]
按年龄降序
比较类:
//年龄降序比较器
public class AgeComparator implements Comparator<Cat> {
@Override
public int compare(Cat o1, Cat o2) {
int age1 = o1.getMonth();
int age2 = o2.getMonth();
return age2 - age1;
}
}
测试输出:
按年龄降序排序后:
[姓名=huahua, 年龄=5, 品种=英短]
[姓名=maomao, 年龄=3, 品种=中华田园猫]
[姓名=fanfan, 年龄=2, 品种=狸花]
在Java.lang
包下。
compareTo
方法被称为它的自然比较方法Collections.sort
方法进行排序Arrays.sort
方法进行排序int compareTo(T o)
方法:对象小于、等于、大于指定对象,则分别返回负整数、0、或正整数核心代码:Collections.sort(list);
商品类:
public class Goods implements Comparable<Goods> {
//属性和方法
....
//比较类
@Override
public int compareTo(Goods o) {
double price1 = this.getPrice();
double price2 = o.getPrice();
int n = new Double(price2 - price1).intValue();
return n;
}
}
测试类:
public class GoodsTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Goods g1 = new Goods("S01", "电视", 2000);
Goods g2 = new Goods("S02", "电脑", 6000);
Goods g3 = new Goods("S03", "手机", 4000);
List<Goods> list = new ArrayList<Goods>();
list.add(g1);
list.add(g2);
list.add(g3);
// 排序前
System.out.println("排序前:");
for (Goods l : list) {
System.out.println(l.toString());
}
// 排序后
Collections.sort(list);
// 排序前
System.out.println("排序前:");
for (Goods l : list) {
System.out.println(l.toString());
}
}
}
输出:
排序前:
[商品编号=S01, 商品名字=电视, 商品价格=2000.0]
[商品编号=S02, 商品名字=电脑, 商品价格=6000.0]
[商品编号=S03, 商品名字=手机, 商品价格=4000.0]
排序前:
[商品编号=S02, 商品名字=电脑, 商品价格=6000.0]
[商品编号=S03, 商品名字=手机, 商品价格=4000.0]
[商品编号=S01, 商品名字=电视, 商品价格=2000.0]
Comparator和Comparable的区别
Comparator
:
Comparable
:
对于Comparator
:
对于Comparable
:
Comparable
接口