黑马程序员技术交流社区

标题: 黑马入学测试题:编写方法对List集合进行排序 的那道题 [打印本页]

作者: 十万一千    时间: 2014-11-21 11:22
标题: 黑马入学测试题:编写方法对List集合进行排序 的那道题
本帖最后由 十万一千 于 2014-11-21 13:37 编辑
  1. package com.itheima.test3;

  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Random;

  5. public class List自定义排序 {
  6.         // 6、 编写程序,生成5个1至10之间的随机整数,存入一个List集合,
  7.         // 编写方法对List集合进行排序(自定义排序算法,禁用Collections.sort方法和TreeSet),然后遍历集合输出。
  8.         @SuppressWarnings("serial")
  9.         public static void main(String[] args) {
  10.                 long s = System.currentTimeMillis();
  11.                 Random random = new Random();
  12.                 List<Integer> list = new ArrayList<Integer>() {
  13.                         /* 覆写list对象的add(E e) 方法 */
  14.                         @Override
  15.                         public boolean add(Integer e) {
  16.                                 for (int i = 0; i < this.size(); i++) {
  17.                                         if (this.get(i) >= e) {
  18.                                                 add(i, e);
  19.                                                 return true;
  20.                                         }
  21.                                 }
  22.                                 return super.add(e);
  23.                         }
  24.                 };
  25.                 for (int i = 0; i < 15000; i++) {
  26.                         list.add(random.nextInt(100) + 1);
  27.                 }
  28.                 // 通过时间对比,该算法中,ArrayList效率在1w左右的数据量的时候远远高于LinkedList
  29.                 System.out.println(System.currentTimeMillis() - s);
  30.                 System.out.println(list);
  31.         }
  32. }
复制代码

ps:代码稍微修改了下if (this.get(i) > e) -> if (this.get(i) >= e)
作者: godmmm    时间: 2014-11-21 11:37
这个思路太好了,点个赞!
作者: 十万一千    时间: 2014-11-21 11:40
godmmm 发表于 2014-11-21 11:37
这个思路太好了,点个赞!

呵呵呵  多谢点赞!
作者: 冥夜    时间: 2014-11-21 13:02
很好啊- -一般思路都是先把元素加入集合然后排序,你这个直接是复写add方法在加的时候直接找到位置加进去了,代码简化了而且效率也很高,点个赞
作者: zhangyangLengen    时间: 2014-11-21 14:46
是个不错的想法
作者: 菜鸟一号    时间: 2014-11-21 14:49
的确很不错,受教了
作者: wf111sxwf    时间: 2014-11-21 15:12
楼主果然好思想啊,看好你哦
作者: 十万一千    时间: 2014-11-21 16:52
wf111sxwf 发表于 2014-11-21 15:12
楼主果然好思想啊,看好你哦

:lol  相互学习了。。。
作者: 张凯zk47    时间: 2014-11-21 17:19
我什么时候才能赶上大神的脚步呢?:dizzy:
作者: qq8921310    时间: 2014-11-21 17:27
赞一个{:3_53:}
作者: 郑飞    时间: 2014-11-21 19:34
好点子 赞一个{:2_36:}
作者: 十万一千    时间: 2014-11-21 21:02
郑飞 发表于 2014-11-21 19:34
好点子 赞一个

呵呵 谢谢了  嗯 希望有更多好东西一起交流哈
作者: xiaguangcheng    时间: 2014-11-21 22:04
果然牛。。。我用数组做的,不知道符合题意不?
  1. public static void Paixu(List<Integer> list){
  2.                 int [] arr=new int[list.size()];
  3.                 for(int x=0;x<list.size();x++){
  4.                         arr[x]=list.get(x);
  5.                         }
  6.                 for(int x=0;x<arr.length-1;x++){
  7.                         for(int y=0;y<arr.length-1-x;y++){
  8.                                 if(arr[y]>arr[y+1]){
  9.                                         int temp=arr[y];
  10.                                         arr[y]=arr[y+1];
  11.                                         arr[y+1]=temp;
  12.                                 }
  13.                         }
  14.                 }
  15.                 for(int x=0;x<arr.length;x++){
  16.                         System.out.println(arr[x]);
  17.                         list.add(Integer.valueOf(arr[x]));
  18.                 }
  19.                
  20.         }
复制代码




作者: 十万一千    时间: 2014-11-21 22:30
xiaguangcheng 发表于 2014-11-21 22:04
果然牛。。。我用数组做的,不知道符合题意不?

行:17   可以修改下吧。。。        list.add(arr[x]);




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2