A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© gsa798780633 中级黑马   /  2016-5-27 18:06  /  702 人查看  /  7 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

一个小练习,下面的程序作用是将list中的元素进行排序,你能发现下面程序的错误吗?
import java.util.*;

public class SortDemo {
public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("cccd");
        list.add("ccc");
        list.add("aaa");
        list.add("aaa");
        list.add("bbb");
        list.add("ddad");
        list.add("ddd");
        sort(list);
        System.out.println(list);
}
public  static void sort(ArrayList<String> list) {
        TreeSet<String> treeSet=new TreeSet<String>(new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                        int num=o1.length()-o2.length();//长度比较为主要条件
                        return num==0?o1.compareTo(o2):num;//长度相等时,字符串比较为次要条件
                }
        });
        treeSet.addAll(list);
        list=new ArrayList<>(treeSet);
}
}

7 个回复

倒序浏览
最后一句代码   是不是数据结构的问题  //list.clear();                 //list.addAll(treeSet);  这样会不会错了
回复 使用道具 举报
分开编译一下
回复 使用道具 举报
看了半个钟,看不出什么错的··········持续关注中
回复 使用道具 举报
sort(list);  不能直接这样写吧  Arrays.sort(list);这个数组工具类的类名点调用吧
回复 使用道具 举报 0 1
你的问题是打印list发现没有排序把?
关键是这一句  list=new ArrayList<>(treeSet);
sort方法传递的是list的地址值,上面这句是用new在堆内存中有新建了一个对象,把这个地址值覆盖了传进来的list, 但是你主方法的list指向的还是原来的那个地址值,因此没有完成排序;可以这样修改:
  1. public static void main(String[] args) {
  2.                 ArrayList<String> list = new ArrayList<>();
  3.                 list.add("cccd");
  4.                 list.add("ccc");
  5.                 list.add("aaa");
  6.                 list.add("aaa");
  7.                 list.add("bbb");
  8.                 list.add("ddad");
  9.                 list.add("ddd");

  10.                 System.out.println(sort(list));// 修改处
  11.         }

  12.         public static ArrayList<String> sort(ArrayList<String> list) {
  13.                 TreeSet<String> treeSet = new TreeSet<String>(new Comparator<String>() {
  14.                         @Override
  15.                         public int compare(String o1, String o2) {
  16.                                 int num = o1.length() - o2.length();// 长度比较为主要条件
  17.                                 return num == 0 ? o1.compareTo(o2) : num;// 长度相等时,字符串比较为次要条件
  18.                         }
  19.                 });
  20.                 treeSet.addAll(list);

  21.                 return new ArrayList<>(treeSet);// 修改处
  22.         }
复制代码

评分

参与人数 1黑马币 +2 收起 理由
新晋猿工 + 2 赞一个!

查看全部评分

回复 使用道具 举报 1 0
关注中....
回复 使用道具 举报
本帖最后由 liukai3385 于 2016-5-28 23:56 编辑
  1. public static void main(String[] args) {
  2.                 ArrayList<String> list = new ArrayList<>();
  3.                 list.add("cccd");
  4.                 list.add("ccc");
  5.                 list.add("aaa");
  6.                 list.add("aaa");
  7.                 list.add("bbb");
  8.                 list.add("ddad");
  9.                 list.add("ddd");
  10.                 ArrayList<String> s = sort(list);
  11.                 System.out.println(s);
  12.         }

  13.         public static ArrayList<String> sort(ArrayList<String> list) {
  14.                 TreeSet<String> treeSet = new TreeSet<String>(new Comparator<String>() {
  15.                         @Override
  16.                         public int compare(String o1, String o2) {
  17.                                 int num = o1.length() - o2.length();// 长度比较为主要条件
  18.                                 return num == 0 ? o1.compareTo(o2) : num;// 长度相等时,字符串比较为次要条件
  19.                         }
  20.                 });
  21.                 treeSet.addAll(list);
  22.                 list = new ArrayList<>(treeSet);
  23.                 return list;
  24.         }
复制代码


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马