对象数组,按属性排序(Arrays.sort总结)

您所在的位置:网站首页 677842 对象数组,按属性排序(Arrays.sort总结)

对象数组,按属性排序(Arrays.sort总结)

2024-01-22 09:57| 来源: 网络整理| 查看: 265

对象按属性排序,原理就是实现了java.util.Comparator接口的对象,传进去对象,重写了compare方法!

看java.util.Comparator

1:java.util.Comparator是一个接口,只包含两个方法:方法摘要  int compare(T o1, T o2)           比较用来排序的两个参数。  boolean equals(Object obj)           指示是否其他对象“等于”此 Comparator。

  2:在JDK中对java.util.Comparator的功能的解释为:“强行对某些对象 collection 进行整体排序”。具体的实现是在compare(T o1, T o2)方法中自定义排序算法,然后将Comparator对象(实现了java.util.Comparator接口的对象)作为一个参数传递给欲排序对象collection的某些排序方法。某些排序方法指的是能够接受java.util.Comparator参数的方法,比如:java.util. Arrays的public static void sort(Object[] a, Comparator c)

 

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]+","); } // 调用数组的静态排序方法sort Arrays.sort(arrayToSort); System.out.println(); System.out.println("排序后:"); for (int i = 0; i < arrayToSort.length; i++){ System.out.print(arrayToSort[i]+","); } } /** * 字符型数组排序demo */ 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("排序后:"); // 调用数组的静态排序方法sort Arrays.sort(arrayToSort); for (int i = 0; i < arrayToSort.length; i++){ System.out.print(arrayToSort[i]+","); } } /** * 对象数组排序demo */ 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(); } } /** * 定义了一个Dog类 */ 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; } } /** * 因为要对对象进行排序,所以要实现java.util.Comparator接口的compare(T o1, T o2)方法,在该方法中自定义排序算法。 */ 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],

 

 

以上内容来自:本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/revo/archive/2006/04/26/677842.aspx

http://hi.baidu.com/javajavajava/blog/item/6c768c45c3a7442ecffca3ae.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3