`
agan112
  • 浏览: 69657 次
  • 来自: 金陵那平
社区版块
存档分类
最新评论

通过排序总结java泛型数组列表

 
阅读更多
·java根据数组的自然顺序对基本数据类型和String类型的泛型数组(数组也可以,不过这里只介绍泛型数组)有很好的排序功能,如下添加4条字符串,然后通过对泛型数组列表进行相应的操作,分别按照升序和降序输出:
import java.util.ArrayList;
import java.util.Collections;

public class Sort {
    public static void main(String args[]) {
        ArrayList<String> array = new ArrayList<String>();
        array.add("ccccc");
        array.add("bbbbb");
        array.add("ddddd");
        array.add("aaaaa");
        Collections.sort(array);
        System.out.println("升序排列的结果:");
        for(String str:array)
            System.out.println(str);
        Collections.reverse(array);
        System.out.println("降序排列的结果:");
        for(String str:array)
            System.out.println(str);
    }
}
输出结果为:
升序排列的结果:
aaaaa
bbbbb
ccccc
ddddd
降序排列的结果:
ddddd
ccccc
bbbbb
aaaaa
而通过以下指定比较器也是可以实现的:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class Sort1 implements Comparator<String> {
    private final static int UP = 1;
    private final static int DOWN = -1;
    private int state;

    public Sort1(int state) {
        this.state = state;
    }

    public int compare(String o1, String o2) {
        return (state == Sort1.DOWN)? sortDown(o1, o2): sortUp(o1, o2);
    }

    private int sortUp(String o1, String o2) {
        if (o1.compareTo(o2) < 0) {
            return -1;
        } else if (o1.compareTo(o2) > 0) {
            return 1;
        } else {
            return 0;
        }
    }

    private int sortDown(String o1, String o2) {
        if (o1.compareTo(o2) > 0) {
            return -1;
        } else if (o1.compareTo(o2) < 0) {
            return 1;
        } else {
            return 0;
        }
    }

    public static void main(String[] args) {
        ArrayList<String> array = new ArrayList<String>();
        array.add("ccccc");
        array.add("bbbbb");
        array.add("ddddd");
        array.add("aaaaa");
        //sort(List<T> list, Comparator<? super T> c) 根据指定比较器产生的顺序对指定列表进行排序
        Collections.sort(array, new Sort1(Sort1.UP));
        System.out.println("升序排列的结果:");
        for (String str : array) {
            System.out.println(str);
        }
       
        Collections.sort(array, new Sort1(Sort1.DOWN));
        System.out.println("降序排列的结果:");
        for (String str : array) {
            System.out.println(str);
        }
    }
}
其输出结果同上。而当我们需要处理的是对象数组(非String)时,数组的自然序列我们是不知道的,所以,需要使用Comparator进行整体排序(关于Comparator请参见jdk-api 1.6),实现Comparator接口,便要实现其中的compare(T o1, T o2) 。以下程序是进行比较名字,按照lastName优先,firstName其次的原则。
import java.util.*;

public class Sort2 {
    public static void main(String[] args) {
        ArrayList<Name> name = new ArrayList<Name>();
        name.add(new Name("John", "Lennon"));
        name.add(new Name("Karl", "Marx"));
        name.add(new Name("Groucho", "Marx"));
        name.add(new Name("Oscar", "Grouch"));
        Collections.sort(name, new Name(new String(), new String()));
        for (Name i : name)
            System.out.println(i.toString());
    }
}

class Name implements Comparator<Name> {
    public String firstName, lastName;

    public Name(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public int compare(Name n1, Name n2) {
        int Cmp = n1.lastName.compareTo(n2.lastName);
        return (Cmp != 0 ? Cmp : (n2.firstName).compareTo(n1.firstName));
    }

    public String toString() {
        return firstName + " " + lastName;
    }
}
输出结果为:
Oscar Grouch
John Lennon
Karl Marx
Groucho Marx
(G<L<M     当M相等时,K<G,所以得此输出)对于这种方式,我觉得应该会有更简洁的方式,尤其是对于
Collections.sort(name, new Name(new String(), new String()));
分享到:
评论

相关推荐

    泛型自定义数组大小

    - **数组的排序**:如果需要对泛型数组进行排序,可以利用Java的`Collections.sort()`方法(对于集合)或`Arrays.sort()`方法(对于数组),但需要注意,数组的元素必须实现了`Comparable`接口或提供自定义的`...

    JAVA泛型简单排序实例

    JAVA泛型源代码实现以下功能:返回数组元素的最大值/最小值下标;判断数组元素是否按升序排列;T对象数组排序;二分法查找key元素;

    java泛型技术之发展

    - **泛型方法**:如Arrays.sort()可以接受泛型数组并进行排序。 5. **限制与注意事项** - **类型擦除**:泛型信息在运行时不可用,无法在运行时获取泛型类型。 - **不能实例化类型参数**:如 `new T()` 是不允许...

    java泛型集合 java集合 集合 java Collection

    首先,Java泛型是一种在编译时提供类型安全性的机制,它允许我们在创建集合时指定元素的类型。这样可以防止在运行时出现ClassCastException,因为编译器会在代码执行前检查类型匹配。例如,我们可以声明一个只包含...

    Java5.0数组排序

    虽然Java 5.0的`Arrays.sort()`方法不能直接用于多维数组,但可以通过递归或循环的方式,对二维数组的每一行进行单独排序。 四、`Collections.sort()`与`List` 除了`Arrays.sort()`,Java 5.0的`Collections.sort...

    Java1.5泛型指南中文版

    感谢所有为Java泛型做出贡献的人们,包括设计者、实现者以及提供反馈和支持的社区成员。泛型是Java语言的一个重要特性,极大地提高了代码的质量和可维护性。 以上就是基于给定文件信息对Java 1.5泛型指南的主要知识...

    java 数组求和计算

    - **泛型数组**:Java 5引入了泛型,允许创建泛型数组以增强类型安全性。 - **数组操作函数**:Java的`Arrays`类提供了许多实用方法,如`sort()`排序数组,`equals()`比较数组内容,`copyOf()`复制数组等。 - **...

    Java集合框架及泛型

    4. **基本类型参数**: Java泛型不能直接接受基本类型(如int、char),但可以通过创建对应的包装类(如Integer、Character)来使用。 5. **协变与逆变**: 在泛型中,类型参数的使用会影响类型安全。比如,List是...

    java数组练习与学习

    在Java中,无法直接创建泛型数组,但可以通过数组的组件类型创建非泛型数组,然后用泛型方法进行操作。 9. **数组作为方法参数**: 可以将数组作为方法参数传递,此时数组是按引用传递的,意味着方法内对数组的...

    java数组资料

    在Java编程语言中,数组是一种重要的...通过深入研究和实践,可以掌握更多高级用法,如泛型数组、数组作为方法参数传递、数组的异常处理等。"在线课第2节_数组"可能进一步探讨这些话题,提供实例和练习,帮助加深理解。

    学士后Java集合框架和泛型课后习题答案

    通过学习和练习这些内容,你可以深入理解Java集合框架的核心概念和泛型的应用,从而在编程实践中更加灵活和高效地处理数据。同时,不断的学习和实践是提升技能的关键,希望你能在Java世界中不断进步。

    Java泛型单链表

    总之,Java泛型单链表提供了一种灵活的数据结构,能够存储各种可比较的数据类型,并且通过其基本操作方法实现了链表的常用功能。这在处理动态数据集或者需要高效插入、删除操作的场景中非常有用。在实际编程中,理解...

    java数组总结共9页.pdf.zip

    在这个"java数组总结共9页.pdf.zip"的压缩包中,我们可以期待找到关于Java数组的全面概述,包括其定义、特点、创建、操作以及在实际编程中的应用。下面是对这个主题的详细解释: 1. **数组定义**: Java数组是对象...

    JAVA泛型与集合框架.ppt

    Java泛型与集合框架是Java编程中至关重要的概念,它们极大地增强了代码的可读性、类型安全性以及效率。泛型是Java 5引入的新特性,主要用于集合类,它允许在编译时进行类型检查,避免了运行时的类型转换异常。 泛型...

    Java 的常用包与数组的复制与排序25

    在Java编程语言中,"Java的常用包"和"数组的复制与排序"是学习的基础且重要的部分。这里,我们主要探讨的是Java的核心库包以及如何处理数组,特别是复制和排序的操作。 首先,让我们深入了解Java的常用包。Java标准...

    accp5.0java第八章 数组

    9. **数组与泛型**:在Java泛型中,可以创建泛型数组,但不能直接创建类型参数的数组,如`T[] array = new T[10];`是不允许的。需要使用类型擦除的技巧或绕过此限制。 10. **内存管理**:Java的垃圾回收机制会自动...

    Java 基础泛型.pdf

    Java泛型是Java编程语言中的...综上所述,Java泛型通过引入类型参数和相关的约束,极大地增强了代码的灵活性和安全性。在实际开发中,熟练掌握和运用泛型能够提高代码质量,降低维护成本,是Java程序员必备的技能之一。

    采用各种排序算法,支持任意类型数据的小型排序系统

    它通过选取一个“基准”元素,将数组分为两部分,一部分的所有元素都小于基准,另一部分所有元素都大于基准,然后对这两部分递归地进行快速排序。 5. **堆排序**:堆是一种特殊的树形数据结构,每个父节点的值都...

Global site tag (gtag.js) - Google Analytics