黑马程序员技术交流社区

标题: 关于集合排序 [打印本页]

作者: zl78365336    时间: 2013-12-2 10:51
标题: 关于集合排序
本帖最后由 zl78365336 于 2013-12-2 16:02 编辑

请问各位下面这个程序错在哪里了
-------------------------------------------------------
List<String> list = new ArrayList<String>();怎样将ArrayList集合中的字符串按字典顺序倒序排列?
---------------------------------------------------------------------------

  1. public static void sort(List<String> list){
  2. for(int x=0;x<list.size()-1;x++){
  3.                         for(int y=0;y<list.size()-x-1;y++){
  4.                                 if(list.get(y).equalsIgnoreCase(list.get(y+1))<0)){
  5.                                         int temp = list.get(y);
  6.                                         list.get(y) = list.get(y+1);
  7.                                         list.get(y+1) = temp;
  8.                                 }
  9.                         }

  10. }

复制代码




作者: Jim-剣◆﹏    时间: 2013-12-2 11:12
针对你这个需求,最简单的实现方式就是,不要用ArrayList
你用hashSet,不用什么操作,直接输出就是你要的结果了
但是如果你说你硬要用ArrayList去操作,也有办法
用集合的工具类collections中的方法
有两个
public static <T extends Comparable<? super T>> void sort(List<T> list)
根据元素的自然顺序 对指定列表按升序进行排序

public static <T> void sort(List<T> list,Comparator<? super T> c)
根据指定比较器产生的顺序对指定列表进行排序
作者: 李文帅    时间: 2013-12-2 15:33
楼主的代码有问题:
1、equalsIgnoreCase:不考虑大小写,返回值是boolean,应该用compareTo方法
2、list集合中存放的元素是String类型元素,get()方法返回值应该是String类型 ,temp应定义为String类型
3、集合的get()方法只能获取集合中的元素,不能设置集合中元素的值,设置元素的值应该用集合的
      set()方法
以下是我个人的想法:
  1. public static void sort(List<String> list){
  2.         for(int x=0;x<list.size()-1;x++){
  3.                 for(int y=0;y<list.size()-x-1;y++){
  4.                         //equalsIgnoreCase:不考虑大小写比较大小,返回值是boolean
  5.                         //应该用compareTo方法
  6.                         if(list.get(y).compareTo(list.get(y+1))>0){
  7.                                 //如果下标y上的元素大于下标y+1上的元素,则执行互换操作
  8.                                 //定义变量接收下标为y的数据
  9.                                 String s1 = list.get(y);
  10.                                 //定义变量接收下标为y+1的数据
  11.                                 String s2 = list.get(y+1);
  12.                                 //把下标y+1上的数据赋值给下标y
  13.                                 list.set(y, s2);
  14.                                 //把下标y上的数据赋值给下标y+1
  15.                                 list.set(y+1, s1);
  16.                         }
  17.                 }
  18.         }
  19. }
复制代码


作者: 1014917278    时间: 2013-12-2 19:58
get是获取,你并不能改变集合内部啊。直接用TreeSet就排好了




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