有的时候需要对数组里的element进行排序。当然可以自己编写合适的排序方法,但既然java包里有自带的Arrays.sort排序方法,在 数组元素比较少的时候为何不用?

  Sorting an Array 1. 数字排序  int[] intArray = new int[] { 4, 1, 3, -23 };

  Arrays.sort(intArray);

  输出: [-23, 1, 3, 4]

  2. 字符串排序,先大写后小写 String[] strArray = new String[] { "z", "a", "C" };

  Arrays.sort(strArray);

  输出: [C, a, z]

  3. 严格按字母表顺序排序,也就是忽略大小写排序 Case-insensitive sort

  Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);

  输出: [a, C, z]

  4. 反向排序, Reverse-order sort

  Arrays.sort(strArray, Collections.reverseOrder());

  输出:[z, a, C]

  5. 忽略大小写反向排序 Case-insensitive reverse-order sort

  Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);

  Collections.reverse(Arrays.asList(strArray));

  输出: [z, C, a]

  java初学者最常见的错误思想,就是试图去写一些方法来完成数组的排序功能,其实,数组排序功能,在java的api里面早已实现,我们没有 必要去重复制造轮子。

  Arrays类有一个静态方法sort,利用这个方法我们可以传入我们要排序的数组进去排序,因为我们传入的是一个数组的引用,所以排序完成的 结果也通过这个引用的来更改数组.对于整数、字符串排序,jdk提供了默认的实现,如果要对一个对象数组排序,则要自己实现 java.util.Comparator接口。

  1. package com.gjh.gee.arrays;
  2. import java.util.Arrays;
  3. public class ArraySortDemo {
  4. public void sortIntArray() {
  5. int[] arrayToSort = new int[] { 48, 5, 89, 80, 81, 23, 45, 16, 2 };
  6. System.out.println("排序前");
  7. for (int i = 0; i < arrayToSort.length; i++)
  8. System.out.println(arrayToSort[i]);
  9. // 调用数组的静态排序方法sort
  10. Arrays.sort(arrayToSort);
  11. System.out.println("排序后");
  12. for (int i = 0; i < arrayToSort.length; i++)
  13. System.out.println(arrayToSort[i]);
  14. }
  15. public void sortStringArray() {
  16. String[] arrayToSort = new String[] { "Oscar", "Charlie", "Ryan",
  17. "Adam", "David" };
  18. System.out.println("排序前");
  19. for (int i = 0; i < arrayToSort.length; i++)
  20. System.out.println(arrayToSort[i]);
  21. System.out.println("排序后");
  22. // 调用数组的静态排序方法sort
  23. Arrays.sort(arrayToSort);
  24. for (int i = 0; i < arrayToSort.length; i++)
  25. System.out.println(arrayToSort[i]);
  26. }
  27. public void sortObjectArray() {
  28. Dog o1 = new Dog("dog1", 1);
  29. Dog o2 = new Dog("dog2", 4);
  30. Dog o3 = new Dog("dog3", 5);
  31. Dog o4 = new Dog("dog4", 2);
  32. Dog o5 = new Dog("dog5", 3);
  33. Dog[] dogs = new Dog[] { o1, o2, o3, o4, o5 };
  34. System.out.println("排序前");
  35. for (int i = 0; i < dogs.length; i++) {
  36. Dog dog = dogs[i];
  37. System.out.println(dog.getName());
  38. }
  39. Arrays.sort(dogs, new ByWeightComparator());
  40. System.out.println("排序后:");
  41. for (int i = 0; i < dogs.length; i++) {
  42. Dog dog = dogs[i];
  43. System.out.println(dog.getName());
  44. }
  45. }
  46. public static void main(String[] args) {
  47. ArraySortDemo t = new ArraySortDemo();
  48. t.sortIntArray();
  49. t.sortStringArray();
  50. t.sortObjectArray();
  51. }
  52. }
  1. package com.gjh.gee.arrays;
  2. public class Dog {
  3. private String name;
  4. private int weight;
  5. public Dog(String name, int weight) {
  6. this.setName(name);
  7. this.weight = weight;
  8. }
  9. public int getWeight() {
  10. return weight;
  11. }
  12. public void setWeight(int weight) {
  13. this.weight = weight;
  14. }
  15. public void setName(String name) {
  16. this.name = name;
  17. }
  18. public String getName() {
  19. return name;
  20. }
  21. }
  1. package com.gjh.gee.arrays;
  2. import java.util.Comparator;
  3. public class ByWeightComparator implements Comparator {
  4. public final int compare(Object pFirst, Object pSecond) {
  5. int aFirstWeight = ((Dog) pFirst).getWeight();
  6. int aSecondWeight = ((Dog) pSecond).getWeight();
  7. int diff = aFirstWeight - aSecondWeight;
  8. if (diff > 0)
  9. return 1;
  10. if (diff < 0)
  11. return -1;
  12. else
  13. return 0;
  14. }
  15. }

下面补充一个Collections.sort排序,原理和Arrays.sort差不多。

  1. //一个POJO例子
  2. class User {
  3. String name;
  4. String age;
  5. public User(String name,String age){
  6. this.name=name;
  7. this.age=age;
  8. }
  9. public String getAge() {
  10. return age;
  11. }
  12. public void setAge(String age) {
  13. this.age = age;
  14. }
  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. }
  22. //具体的比较类,实现Comparator接口
  23. import java.util.Comparator;
  24. import java.util.List;
  25. import java.util.ArrayList;
  26. import java.util.Collections;
  27. public class ComparatorUser implements Comparator{
  28. public int compare(Object arg0, Object arg1) {
  29. User user0=(User)arg0;
  30. User user1=(User)arg1;
  31. //首先比较年龄,如果年龄相同,则比较名字
  32. int flag=user0.getAge().compareTo(user1.getAge());
  33. if(flag==0){
  34. return user0.getName().compareTo(user1.getName());
  35. }else{
  36. return flag;
  37. }
  38. }
  39. }
  40. //测试类
  41. public class SortTest {
  42. public static void main(String[] args){
  43. List userlist=new ArrayList();
  44. userlist.add(new User("dd","4"));
  45. userlist.add(new User("aa","1"));
  46. userlist.add(new User("ee","5"));
  47. userlist.add(new User("bb","2"));
  48. userlist.add(new User("ff","5"));
  49. userlist.add(new User("cc","3"));
  50. userlist.add(new User("gg","6"));
  51. ComparatorUser comparator=new ComparatorUser();
  52. Collections.sort(userlist, comparator);
  53. for (int i=0;i<userlist.size();i++){
  54. User user_temp=(User)userlist.get(i);
  55. System.out.println(user_temp.getAge()+","+user_temp.getName());
  56. }
  57. }
  58. }

//首先年龄排序,如果年龄相同,则按名字排序

结果:
   1, aa
   2, bb
   3, cc
   4, dd
   5, ee                    //注意:同样是5岁的人,则比较名字(ee,ff),然后排序
   5, ff
   6, gg

 
 

Java数组排序的更多相关文章

  1. Java数组排序和查找

    Java 1.2 添加了自己的一套实用工具,可用来对数组或列表进行排列和搜索.这些工具都属于两个新类的"静态"方法.这两个类分别是用于排序和搜索数组的Arrays,以及用于排序和搜 ...

  2. JAVA 数组排序

    一.数组升序排序 实例: import java.util.Arrays; //导入数组处理 public class Test{ public static void main(String[] a ...

  3. JAVA冒泡排序/JAVA冒泡排序再找出给定数据中的最大值最小值/JAVA数组排序

    //数组中排序    int in[] = {1,6,5,8,9};    Arrays.sort(in);    for(int i=0;i<in.length;i++){       Sys ...

  4. java数组排序(冒泡、直排)反转

    package lianxi; public class maopao { public static void main(String[] args){ int[] i=new int[]{45,6 ...

  5. java数组排序,并将数组内的数据求和

    java数据编列并求和,江湖我狼哥,人狠话不多,直接上代码! import java.util.Arrays; public class Intarry { public static void ma ...

  6. Java数组排序基础算法,二维数组,排序时间计算,随机数产生

    import java.util.Arrays; //包含Arrays import java.util.Random; public class HelloWorld { public static ...

  7. [Java]数组排序-选择排序 冒泡排序 插入排序

    1 选择排序  原理:a 将数组中的每个元素,与第一个元素比较          如果这个元素小于第一个元素, 就将这个         两个元素交换.       b 每轮使用a的规则, 可以选择出 ...

  8. java数组排序(插入排序、冒泡排序、选择排序)与递归 代码示例

    import java.util.Scanner; public class OrderBy { public static void main(String[] args) { // Scanner ...

  9. Java数组排序和插入

    如何排序数组并插入元素? 以下示例显示如何使用sort()方法和用户定义的insertElement()方法来完成此任务. package com.yiibai; import java.util.* ...

随机推荐

  1. “我爱淘”冲刺阶段Scrum站立会议6

    完成任务: 对大部分的布局已经做好了布置. 计划任务: 实现数据库的链接,将页面功能完善. 遇到问题: 使用webservice对数据的提取,用数据库将书的信息展示软件中.

  2. 找出1-N中1的个数

    一.题目 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. 要求: 写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数.例如 f(12)  = 5. ...

  3. 简单的C语言小学四则运算设计

    题目:设计一个简单的四则运算编辑器 思路:我使用的是C语言编程,看到题目首先要随机出3个随机数,其中两个为100以内的随机数(a,b),一个为0~3的随机数(k). k值的变化使得+ - * /的变化 ...

  4. AxMicrosoft.Office.Interop.Owc11.AxSpreadsheet控件在C#中的引用

    这几天要是用AxMicrosoft.Office.Interop.Owc11.AxSpreadsheet控件做查询,发现一系列问题,一点点记录下来吧,以备后查: 第一.相关属性:http://www. ...

  5. Extjs 选择元素涉及方法总结

    本文主要是解释Extjs在使用过程中使用的相关选择方法: 1.首先解释第一组概念: Ext.get(String/HTMLElement/Ext.Element el) Ext.getCmp(Stri ...

  6. 【BZOJ】【1052】【HAOI2007】覆盖问题

    二分+贪心 首先二分L,转化成判定问题…… 但是判定不会判啊QAQ orz hzwer,用一个最小的矩形框住所有点后,直接往矩形的角上摆正方形……第二个用同样的方法摆,最后判一下剩下的能否被完全覆盖 ...

  7. Leetcode#90 Subsets II

    原题地址 跟Subsets(参见这篇文章)类似. 但因为有重复元素,所以要考虑去重问题. 什么情况下会出现重复呢?比如S = {5, 5, 5},如果要选1个5,一共有C(3,1)=3种选法,即100 ...

  8. 【bzoj1007】[HNOI2008]水平可见直线

    1007: [HNOI2008]水平可见直线 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5932  Solved: 2254[Submit][Sta ...

  9. swipejs的使用

    <div id='slider' class='swipe'> <div class="swipe-wrap"> <div><img sr ...

  10. 转载淘宝UED响应十日谈

    响应式十日谈:楔子 响应式十日谈第一日:使用 rem 设置文字大小