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

通过排序总结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泛型简单排序实例

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

    泛型自定义数组大小

    运用Java编程,自定义数组大小,解决在数组中加入元素,获取元素;按指定位置删除元素,修改元素;清空数组;数组的排序。

    Java 生成随机字符串数组的实例详解

    主要介绍了Java 生成随机字符串数组的实例详解的相关资料,主要是利用Collections.sort()方法对泛型为String的List 进行排序,需要的朋友可以参考下

    Java开发技术大全(500个源代码).

    SortDemo.java 排序示例 travelTwoDime.java 遍历二维数组 traversing.java 遍历一维数组 useStrBuf.java 使用StringBuffer示例 useString.java 使用String示例 YanghuiTri.java 构造和显示杨辉三角 第6章 ...

    JAVA泛型排序算法设计思想 (2011年)

    论述了JAVA泛型排序设计思想。通过移植C++标准模板库的partial_sort、nth_element函数算法,可方便实现java 下给定基本数据类型数组、对象数组、基本序列容器元素局部排序、求第nth元素功能,是对JAVA固有sort函数有效...

    Java2核心技术.part5

    5.3泛型数组列表 5.3.1访问数组列表元素 5.3.2类型化与原始数组列表的兼容性 5.4对象包装器与自动打包 5.5反射 5.5.1 Class类 5.5.2使用反射分析类的能力 5.5.3在运行时使用反射分析对象 ...

    Java后端面试问题整理.docx

    Java后端面试知识点总结,涉及JVM • 熟悉JVM内存区域,常用引用类型,垃圾回收机制、算法以及常见的GC垃圾收集器(Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1) • 熟悉常用IO模型(BIO、...

    JAVA上百实例源码以及开源项目源代码

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    廖雪峰 Java 教程.doc

    数组排序 多维数组 命令行参数 面向对象编程 面向对象基础 方法 构造方法 方法重载 继承 多态 抽象类 接口 静态字段和静态方法 包 作用域 classpath和jar 模块 Java核心类 字符串和编码 ...

    Java2核心技术.part3

    5.3泛型数组列表 5.3.1访问数组列表元素 5.3.2类型化与原始数组列表的兼容性 5.4对象包装器与自动打包 5.5反射 5.5.1 Class类 5.5.2使用反射分析类的能力 5.5.3在运行时使用反射分析对象 ...

    Java2核心技术.part1

    5.3泛型数组列表 5.3.1访问数组列表元素 5.3.2类型化与原始数组列表的兼容性 5.4对象包装器与自动打包 5.5反射 5.5.1 Class类 5.5.2使用反射分析类的能力 5.5.3在运行时使用反射分析对象 5.5.4使用...

    Java2核心技术.part6

    5.3泛型数组列表 5.3.1访问数组列表元素 5.3.2类型化与原始数组列表的兼容性 5.4对象包装器与自动打包 5.5反射 5.5.1 Class类 5.5.2使用反射分析类的能力 5.5.3在运行时使用反射分析对象 ...

    Java2核心技术.part4

    5.3泛型数组列表 5.3.1访问数组列表元素 5.3.2类型化与原始数组列表的兼容性 5.4对象包装器与自动打包 5.5反射 5.5.1 Class类 5.5.2使用反射分析类的能力 5.5.3在运行时使用反射分析对象 ...

    Java2核心技术.part2

    5.3泛型数组列表 5.3.1访问数组列表元素 5.3.2类型化与原始数组列表的兼容性 5.4对象包装器与自动打包 5.5反射 5.5.1 Class类 5.5.2使用反射分析类的能力 5.5.3在运行时使用反射分析对象 ...

    疯狂JAVA讲义

    8.6 泛型与数组 311 8.7 本章小结 313 第9章 与运行环境交互 314 9.1 与用户互动 315 9.1.1 运行Java程序的参数 315 9.1.2 使用Scanner获取键盘输入 316 9.1.3 使用BufferedReader获取键盘输入 318 9.2 系统...

    Java开发详解.zip

    031305_【第13章:Java类集】_排序及重复元素说明笔记.pdf 031306_【第13章:Java类集】_SortedSet接口笔记.pdf 031307_【第13章:Java类集】_Iterator接口笔记.pdf 031308_【第13章:Java类集】_ListIterator接口...

    java jdk实列宝典 光盘源代码

    java为数据结构中的列表定义了一个接口类java.util.list同时提供了3个实现类,分别是ArrayList、Vector、LinkedList使用; 生成不重复的随机数序列;列表、集合与数组的互相转换;java为数据结构中的映射定义一个接口...

Global site tag (gtag.js) - Google Analytics