-
使用Arrays.sort()方法,以及涉及到的Comparable和Comparator
- Arrays.sort用法
-
-
- package test;
-
- import java.util.Arrays;
- import java.util.Comparator;
-
- public class ArraySortDemo {
-
-
-
- public void sortIntArray() {
- int[] arrayToSort = new int[] { 48, 5, 89, 80, 81, 23, 45, 16, 2 };
- System.out.println("整数型数组排序,排序前:");
- for (int i = 0; i < arrayToSort.length; i++){
- System.out.print(arrayToSort[i]+",");
- }
-
- Arrays.sort(arrayToSort);
- System.out.println();
- System.out.println("排序后:");
- for (int i = 0; i < arrayToSort.length; i++){
- System.out.print(arrayToSort[i]+",");
- }
- }
-
-
-
-
- public void sortStringArray() {
- String[] arrayToSort = new String[] { "Oscar", "Charlie", "Ryan",
- "Adam", "David","aff","Aff" };
- System.out.println();
- System.out.println("字符型数组排序,排序前:");
- for (int i = 0; i < arrayToSort.length; i++){
- System.out.print(arrayToSort[i]+",");
- }
- System.out.println();
- System.out.println("排序后:");
-
- Arrays.sort(arrayToSort);
-
- for (int i = 0; i < arrayToSort.length; i++){
- System.out.print(arrayToSort[i]+",");
- }
- }
-
-
-
-
- public void sortObjectArray() {
- Dog o1 = new Dog("dog1", 1);
- Dog o2 = new Dog("dog2", 4);
- Dog o3 = new Dog("dog3", 5);
- Dog o4 = new Dog("dog4", 2);
- Dog o5 = new Dog("dog5", 3);
- Dog[] dogs = new Dog[] { o1, o2, o3, o4, o5 };
- System.out.println();
- System.out.println("对象数组排序排序前:");
- for (int i = 0; i < dogs.length; i++) {
- Dog dog = dogs[i];
- System.out.print(dog.getName()+"["+dog.getWeight()+"],");
- }
- Arrays.sort(dogs, new ByWeightComparator());
- System.out.println();
- System.out.println("排序后:");
- for (int i = 0; i < dogs.length; i++) {
- Dog dog = dogs[i];
- System.out.print(dog.getName()+"["+dog.getWeight()+"],");
- }
- }
-
- public static void main(String[] args) {
- ArraySortDemo t = new ArraySortDemo();
- t.sortIntArray();
- t.sortStringArray();
- t.sortObjectArray();
- }
- }
-
-
-
-
- class Dog {
- private String name;
- private int weight;
-
- public Dog(String name, int weight) {
- this.setName(name);
- this.weight = weight;
- }
-
- public int getWeight() {
- return weight;
- }
-
- public void setWeight(int weight) {
- this.weight = weight;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getName() {
- return name;
- }
- }
-
-
-
-
- class ByWeightComparator implements Comparator {
- public final int compare(Object pFirst, Object pSecond) {
- int aFirstWeight = ((Dog) pFirst).getWeight();
- int aSecondWeight = ((Dog) pSecond).getWeight();
- int diff = aFirstWeight - aSecondWeight;
- if (diff > 0)
- return 1;
- if (diff < 0)
- return -1;
- else
- return 0;
- }
- }
-
- 运行结果:
-
- 整数型数组排序,排序前:
- 48,5,89,80,81,23,45,16,2,
- 排序后:
- 2,5,16,23,45,48,80,81,89,
- 字符型数组排序,排序前:
- Oscar,Charlie,Ryan,Adam,David,aff,Aff,
- 排序后:
- Adam,Aff,Charlie,David,Oscar,Ryan,aff,
- 对象数组排序排序前:
- dog1[1],dog2[4],dog3[5],dog4[2],dog5[3],
- 排序后:
- dog1[1],dog4[2],dog5[3],dog2[4],dog3[5],
- 地方
- List list = new ArrayList() ;
- list.add("abcd") ;
- list.add("abdc") ;
- list.add("aadf") ;
- list.add("aabf") ;
-
- String[] strs = new String[list.size()] ;
- list.toArray(strs) ;
-
- Arrays.sort(strs,2,4) ;
- for(String str : strs){
- System.out.println(str) ;
- }
-
Arrays.sort 不区分大小写 排序
-
当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序。
-
-
一、Comparator
-
-
强行对某个对象collection进行整体排序的比较函数,可以将Comparator传递给Collections.sort或Arrays.sort。
-
-
接口方法:
-
-
Java代码
-
-
-
-
int compare(Object o1, Object o2);
-
-
-
-
int compare(Object o1, Object o2);
-
-
-
案例:
-
Java代码
-
import java.util.Arrays;
-
import java.util.Comparator;
-
-
public class SampleComparator implements Comparator {
-
-
public int compare(Object o1, Object o2) {
-
return toInt(o1) - toInt(o2);
-
}
-
-
private int toInt(Object o) {
-
String str = (String) o;
-
str = str.replaceAll("一", "1");
-
str = str.replaceAll("二", "2");
-
str = str.replaceAll("三", "3");
-
-
return Integer.parseInt(str);
-
}
-
-
-
-
-
public static void main(String[] args) {
-
String[] array = new String[] { "一二", "三", "二" };
-
Arrays.sort(array, new SampleComparator());
-
for (int i = 0; i < array.length; i++) {
-
System.out.println(array[i]);
-
}
-
}
-
-
}
-
-
二、Comparable
-
-
强行对实现它的每个类的对象进行整体排序,实现此接口的对象列表(和数组)可以通过Collections.sort或Arrays.sort进行自动排序。
-
-
接口方法:
-
-
Java代码
-
-
-
-
int compareTo(Object o);
-
-
-
-
int compareTo(Object o);
-
-
假设对象User,需要按年龄排序:
-
Java代码
-
public class User {
-
-
private String id;
-
private int age;
-
-
public User(String id, int age) {
-
this.id = id;
-
this.age = age;
-
}
-
-
public int getAge() {
-
return age;
-
}
-
-
public void setAge(int age) {
-
this.age = age;
-
}
-
-
public String getId() {
-
return id;
-
}
-
-
public void setId(String id) {
-
this.id = id;
-
}
-
-
}
-
public class User {
-
-
private String id;
-
private int age;
-
-
public User(String id, int age) {
-
this.id = id;
-
this.age = age;
-
}
-
-
public int getAge() {
-
return age;
-
}
-
-
public void setAge(int age) {
-
this.age = age;
-
}
-
-
public String getId() {
-
return id;
-
}
-
-
public void setId(String id) {
-
this.id = id;
-
}
-
-
}
-
-
改造后的对象:
-
Java代码
-
import java.util.Arrays;
-
-
public class User implements Comparable {
-
-
private String id;
-
private int age;
-
-
public User(String id, int age) {
-
this.id = id;
-
this.age = age;
-
}
-
-
public int getAge() {
-
return age;
-
}
-
-
public void setAge(int age) {
-
this.age = age;
-
}
-
-
public String getId() {
-
return id;
-
}
-
-
public void setId(String id) {
-
this.id = id;
-
}
-
-
public int compareTo(Object o) {
-
return this.age - ((User) o).getAge();
-
}
-
-
-
-
-
public static void main(String[] args) {
-
User[] users = new User[] { new User("a", 30), new User("b", 20) };
-
Arrays.sort(users);
-
for (int i = 0; i < users.length; i++) {
-
User user = users[i];
-
System.out.println(user.getId() + " " + user.getAge());
-
}
-
}
-
-
}
-
-
三、Comparator和Comparable的区别
-
-
先看一下使用Comparator对User集合实现排序的方式:
-
Java代码
-
import java.util.Arrays;
-
import java.util.Comparator;
-
-
public class UserComparator implements Comparator {
-
-
public int compare(Object o1, Object o2) {
-
return ((User) o1).getAge() - ((User) o2).getAge();
-
}
-
-
-
-
-
public static void main(String[] args) {
-
User[] users = new User[] { new User("a", 30), new User("b", 20) };
-
Arrays.sort(users, new UserComparator());
-
for (int i = 0; i < users.length; i++) {
-
User user = users[i];
-
System.out.println(user.getId() + " " + user.getAge());
-
}
-
}
-
-
}
-
-
一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。
-
Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
-
1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
-
2、可以使用多种排序标准,比如升序、降序等
-
相关阅读:
华为交换机中hybrid、access、trunk的区别
debug调试
网络基础--ICMP
HCNA---ARP协议
Python之字典
python之元组
网络基础--Telnet、SSH、FTP
学习Cisco切换为华为的第一天---Telnet
学思科,考华为,用华三。这是多少人的现况,快来听听我的经历~
[P3385]【模板】负环 (spfa / bellman-ford)
-
原文地址:https://www.cnblogs.com/allenzhaox/p/3201821.html
Copyright © 2020-2023
润新知