知识大全 分析Java集合框架及数组的排序

Posted

篇首语:登山则情满于山,观海则意溢于海。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 分析Java集合框架及数组的排序相关的知识,希望对你有一定的参考价值。

分析Java集合框架及数组的排序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    这篇文章主要讲的是如何使用现有的类库对数组和各种Collection容器进行排序 首先要知道两个类 java util Arrays和java util Collections(注意和Collection的区 别)Collection是集合框架的顶层接口 而Collections是包含了许多静态方法 我们使用Arrays对数组进行排序 使用Collections对结合框架容器进行排序 如ArraysList LinkedList等 例子中都要加上import java util *和其他外壳代码 如类和静态main方法 我会在第一个例子里写出全部代码 接下来会无一例外的省略         比如有一个整型数组         int[] intArray = new int[] ; 我们如何进行排序呢?你这个时候是否在想快速排序的算法?看看下面的实现方法         import java util *;  public class Sort        public static void main(String[] args)        int[] intArray = new int[] ;        Arrays sort(intArray)                 这样我们就用Arrays的静态方法sort()对intArray进行了升序排序 现在数组已经变成了         如果是字符数组 String[] strArray = new String[] z a C ; 我们用 Arrays sort(strArray) 进行排序后的结果是C a z sort()会根据元素的自然顺序进行升序排序 如果希望对大小写不敏感的话可以这样写 Arrays sort(strArray String CASE_INSENSITIVE_ORDER) 当然我们也可以指定数组的某一段进行排序比如我们要对数组下表 的部分(假设数组长度大于 )进行排序 其他部分保持不变 我们可以使用 Arrays sort(strArray ) 这样 我们只对前三个元素进行了排序 而不会影响到后面的部分         当然有人会想 我怎样进行降序排序?在众多的sort方法中有一个sort(T[] a Comparator<? super T> c) 我们使用Comparator获取一个反序的比较器即可 Comparator会在稍后讲解 以前面的intArray[]为例 Arrays sort(intArray Comparator reverseOrder()) 这样 我们得到的结果就是 如果不想修改原有代码我们也可以使用 Collections reverse(Arrays asList(intArray)) 得到该数组的反序 结果同样为         现在的情况变了 我们的数组里不再是基本数据类型(primtive type)或者String类型的数组 而是对象数组 这个数组的自然顺序是未知的 因此我们需要为该类实现Comparable接口 比如我们有一个Name类         class Name implements Comparable<Name>        public String firstName lastName;        public Name(String firstName String lastName)        this firstName=firstName;        this lastName=lastName;           public int pareTo(Name o)     //实现接口        int lastCmp=pareTo(o lastName)         return (lastCmp!= ?lastCmp:pareTo(o firstName))               public String toString()     //便于输出测试        return firstName+ +lastName;                这样 当我们对这个对象数组进行排序时 就会先比较lastName 然后比较firstName 然后得出两个对象的先后顺序 就像pareTo(Name o)里实现的那样 不妨用程序试一试         import java util *;        public class NameSort         public static void main(String[] args)         Name nameArray[] =         new Name( John Lennon )         new Name( Karl Marx )         new Name( Groucho Marx )         new Name( Oscar Grouch )        Arrays sort(nameArray)         for(inti= ;i<nameArray length;i++)        System out println(nameArray[i] toString())                           结果正如我们所愿         Oscar Grouch  John Lennon  Groucho Marx  Karl Marx 对集合框架进行排序如果已经理解了Arrays sort()对数组进行排序的话 集合框架的使用也是大同小异 只是将Arrays替换成了Collections 注意Collections是一个类而Collection是一个接口 虽然只差一个 s 但是它们的含义却完全不同         假如有这样一个链表         LinkedList list=new LinkedList()         list add( )         list add( )         list add( )         list add( )         我们只需要使用 Collections sort(list) 就可以将ll里的元素按从小到大的顺序进行排序 结果就成了 [ ] 如果LinkedList里面的元素是String 同样会想基本数据类型一样从小到大排序 如果要实现反序排序也就是从达到小排序 Collections sort(list Collectons reverseOrder()) 如果LinkedList里面的元素是自定义的对象 可以像上面的Name对象一样实现Comparable接口 就可以让Collection sort()为您排序了 如果你想按照自己的想法对一个对象进行排序 你可以使用sort(List<T> list Comparator<? super T> c) 这个方法进行排序 在给出例子之前 先要说明一下Comparator的使用 Comparable接口的格式 public interface Comparator<T> int pare(T o T o )     其实Comparator里的int pare(T o T o )的写法和Comparable里的pareTo()方法的写法差不多 在上面的Name类中我们的比较是从LastName开始的 这是西方 人的习惯 到了中国 我们想从fristName开始比较 又不想修改原来的代码 这个时候 Comparator就可以派上用场了         final Comparator<Name> FIRST_NAME_ORDER=new Comparator<Name>()                public int pare(Name n Name n )                int firstCmp=pareTo(n firstName)         return(firstCmp!= ?firstCmp:pareTo        (n firstName))                           ;        这样一个我们自定义的Comparator FIRST_NAME_ORDER就写好了 将上个例子里那个名字数组转化为List:List<Name> list=Arrays asList(nameArray) Collections sort(list FIRST_NAME_ORDER) 这样我们就成功的使用自己定义的比较器设定排序 cha138/Article/program/Java/hx/201311/26682

相关参考

知识大全 PHP数组排序函数合集 以及它们之间的联系分析

PHP数组排序函数合集以及它们之间的联系分析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  下边

知识大全 数据结构考研分类复习真题 第十章 排序[55]

  .图  注a是整数数组存放要排序的数组集合n是a的长度pijkmt是临时变量p为整型数组ijkmt为整型变量本题给出的是将数组a的元素aa…an从大到小排序的子程序的框图如上图填空完善此算法框图该

知识大全 常见排序算法的java实现

  最近在面试遇到很多排序算法问题总结一下  定义数组如下  [java]  int[]array=newint[];  int[]array=newint[];  首先是插入排序  [java]  

知识大全 JavaScript中的数组、集合及效率

JavaScript中的数组、集合及效率  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数组是J

知识大全 Java静态与动态数组特点分析

Java静态与动态数组特点分析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  平常我们接触到的大

知识大全 php关联数组排序(快速排序)

  使用环境和条件  有这样一种情况php里面的关联数组如果下面这样的数组数据  [php]  $array=array(  array(  name=>xiao  age=>  )  a

知识大全 java内存泄漏的定位与分析

  ArrayList就是传说中的动态数组就是Array的复杂版本它提供了如下一些好处动态的增加和减少元素灵活的设置数组的大小……  认真阅读本文我相信一定会对你有帮助比如为什么ArrayList里面

知识大全 数据结构考研分类复习真题 第十章 答案[17]

  在具有n个元素的集合中找第k(≤k≤n)个最小元素应使用快速排序方法其基本思想如下设n个元素的集合用一维数组表示其第一个元素的下标为最后一个元素下标为n以第一个元素为枢轴经过快速排序的一次划分找到

知识大全 列表排序代码分析

Java编程技巧:列表排序代码分析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在JavaCo

知识大全 PHP数组排序函数

PHP数组排序函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!cha138/Artic