黑马程序员技术交流社区

标题: 小白求如何给集合中的字符串排序 [打印本页]

作者: IT军犬    时间: 2016-8-17 09:41
标题: 小白求如何给集合中的字符串排序
本帖最后由 IT军犬 于 2016-8-17 21:39 编辑

入学视频Day16作业题4 小白蒙逼了
public static void main(String[] args) {
                List<String> list1 = new ArrayList<>();
                list1.add("b");
                list1.add("f");
                list1.add("e");
                list1.add("c");
                list1.add("a");
                list1.add("d");
                sort1(list1);
                System.out.println(list1);        // 对集合中添加的元素排序,输出a, b, c, d, e, f


小白我想了个如此操蛋的方法 还失败了 输出还是bfecab求大神们解答
public static void sort1(List<String> l) {
                String[] arr = l.toArray(new String[l.size()]);
                String s = "";
                for (String string : arr) {
                        s = s +string;
                }
                char[] arr1 = s.toCharArray();
                Arrays.sort(arr1);
                for (int i = 0;i < arr1.length;i++) {
                        arr = arr.valueOf(arr1);
                }
                l = Arrays.asList(arr);
        }
又发现问题了,Day16还没讲Collections 和比较器,如果不用这两个类,还有其他方法么?



作者: 小小丶白    时间: 2016-8-17 10:04
        public static void sort1(List<String> l) {
               
                //集合排序工具传入一个比较器
               
                Collections.sort(l, new Comparator<String>() {

                        @Override
                        public int compare(String s1, String s2) {
                                //使用String中的compareTo方法比较参数
                                /*
                                 * 返回值大于零s1大于s2
                                 * 返回值为零s1等于s2
                                 * 返回值小于零s1小于s2
                                 * */
                                return s1.compareTo(s2);
                        }
                });
        }

//使用上面这个方法试试
作者: 小小丶白    时间: 2016-8-17 10:42
[Java] 纯文本查看 复制代码
        public static void sort1(List<String> list) {
               
                //集合排序工具传入一个比较器
                for (int i = 0; i < list.size() - 1; i++) {
                        int indexMax = i;
                        for (int j = i + 1; j < list.size(); j++) {
                                String s1 = list.get(i);
                                String s2 = list.get(j);
                                char c1 = s1.toCharArray()[0];
                                char c2 = s2.toCharArray()[0];
                                if (c1 > c2) {
                                        indexMax = j;
                                }
                        }
                        //交换位置
                        change(list, i , indexMax);
                }
        }
        public static void change(List<String> list, int i, int indexMax) {
                String temp = list.remove(indexMax);
                list.add(indexMax - 1, list.get(i));
                list.remove(i);
                list.add(i, temp);
        }

作者: IT军犬    时间: 2016-8-17 11:54
本帖最后由 IT军犬 于 2016-8-17 12:07 编辑
小小丶白 发表于 2016-8-17 10:04
public static void sort1(List l) {
               
                //集合排序工具传入一个比较器

collection里有sort么?
C:\Users\Administrator\Desktop

无标题.png (223.21 KB, 下载次数: 18)

无标题.png

无标题.png (223.21 KB, 下载次数: 20)

无标题.png

作者: 水月灬清影    时间: 2016-8-17 12:02
[Java] 纯文本查看 复制代码

public static void main(String[] args) {
                List<String> list = new ArrayList<String>();
                list.add("b");
                list.add("f");
                list.add("e");
                list.add("c");
                list.add("a");
                list.add("d");
                Collections.sort(list);  //Collections工具类直接排序
                System.out.println(list);//[a, b, c, d, e, f]
               
                //要是不要[],继续往下走,做字符串拼接
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < list.size(); i++) {
                        if (i == list.size() - 1) {
                                sb.append(list.get(i));
                        }else{
                                sb.append(list.get(i)+", ");
                        }
                }
                System.out.println(sb);//a, b, c, d, e, f


        }

上面兄弟的提到的比较器排序也是可以的
作者: 水月灬清影    时间: 2016-8-17 12:10
IT军犬 发表于 2016-8-17 11:54
collection里有sort么?

Collection 和 Collections是两码事。对于你这道题来说,不自定义比较器就可以实现,如果是对一系列对象针对特定要求排序,就得用比较器。
作者: IT军犬    时间: 2016-8-17 12:13
水月灬清影 发表于 2016-8-17 12:10
Collection 和 Collections是两码事。对于你这道题来说,不自定义比较器就可以实现,如果是对一系列对象 ...

搜噶,终于找到问题在哪了
作者: IT军犬    时间: 2016-8-17 12:16
水月灬清影 发表于 2016-8-17 12:10
Collection 和 Collections是两码事。对于你这道题来说,不自定义比较器就可以实现,如果是对一系列对象 ...

搜噶,终于找到问题在哪了
作者: talons    时间: 2016-8-17 20:25
Collection是所有单列集合的父接口,而Collections是一个提供实现Collection接口的对象的一些方法的一个工具类。




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