黑马程序员技术交流社区
标题:
解错题
[打印本页]
作者:
gsa798780633
时间:
2016-5-27 18:06
标题:
解错题
一个小练习,下面的程序作用是将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);
}
}
作者:
lifeiwangyue
时间:
2016-5-27 23:12
最后一句代码 是不是数据结构的问题 //list.clear(); //list.addAll(treeSet); 这样会不会错了
作者:
一个大西瓜
时间:
2016-5-27 23:48
分开编译一下
作者:
新晋猿工
时间:
2016-5-28 00:58
看了半个钟,看不出什么错的··········持续关注中
作者:
z736886202
时间:
2016-5-28 01:10
sort(list); 不能直接这样写吧 Arrays.sort(list);这个数组工具类的类名点调用吧
作者:
huburt
时间:
2016-5-28 09:05
你的问题是打印list发现没有排序把?
关键是这一句 list=new ArrayList<>(treeSet);
sort方法传递的是list的地址值,上面这句是用new在堆内存中有新建了一个对象,把这个地址值覆盖了传进来的list, 但是你主方法的list指向的还是原来的那个地址值,因此没有完成排序;可以这样修改:
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");
System.out.println(sort(list));// 修改处
}
public static ArrayList<String> 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);
return new ArrayList<>(treeSet);// 修改处
}
复制代码
作者:
haojingwei310
时间:
2016-5-28 23:22
关注中....
作者:
liukai3385
时间:
2016-5-28 23:46
本帖最后由 liukai3385 于 2016-5-28 23:56 编辑
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");
ArrayList<String> s = sort(list);
System.out.println(s);
}
public static ArrayList<String> 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);
return list;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2