问答详情
源自:6-5 应用 Collections.sort() 实现 List 排序

哪里有问题?一直提示strList改为静态static


import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

import java.util.Random;


public class TempTest {

List<StringBuilder> strList=new ArrayList<StringBuilder>();


public static void main(String[] args) {

// TODO Auto-generated method stub

String st="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

StringBuilder strbd=new StringBuilder();

//StringBuilder str;

Random random=new Random();

for (int i = 0; i < 10; i++) {

do {

int length=random.nextInt(10);

for (int j = 0; j < length; j++) {

strbd.append(st.charAt(random.nextInt(62)));

}

} while (strList.contains(strbd));

strList.add(strbd);

}

System.out.println("---------------排序前--------------------");

for(StringBuilder sl : strList)

System.out.println(sl);

Collections.sort(strList);

System.out.println("---------------排序后--------------------");

for(StringBuilder sl : strList)

System.out.println(sl);


}


}



提问者:wshyzx 2016-07-27 20:58

个回答

  • KeT
    2016-07-28 10:42:35
    已采纳

    import java.util.ArrayList;
    
    import java.util.Collections;
    import java.util.List;
    import java.util.Random;
    
    public class TempTest {
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    	 List<String> strList=new ArrayList<String>();
    String st="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    
    //StringBuilder str;
    Random random=new Random();
    for (int i = 0; i < 10; i++) {
    	StringBuilder strbd=new StringBuilder();
    
    do {
    int length=random.nextInt(10);
    for (int j = 0; j < length; j++) {
    strbd.append(st.charAt(random.nextInt(62)));
    }
    } while (strList.contains(strbd));
    strList.add(strbd.toString());
    }
        
    
    System.out.println("---------------排序前--------------------");
    for(String sl : strList)
    System.out.println(sl);
    Collections.sort(strList);
    System.out.println("---------------排序后--------------------");
    for(String sl : strList)
    System.out.println(sl);
    
    }
    
    }

    传错了,这个才是

  • KeT
    2016-07-28 19:29:17

    你查java的API文档就可以发现,String类实现了Comparable接口,但是StringBuilder类并没有实现这个接口,所以它不行。还有,其实那时候我是被陷害的,群众不给机会,我只能先做个猿先,找机会强转,重新new成人。

  • wshyzx
    2016-07-28 16:19:53

    我后面的理解了,不过并没有提到String与StringBuilder写sort方法时不同。而且StringBuilder写Comparator我也写出来了。

    这些都不重要,我只想问,柯景腾你不是吸毒进去了吗?

  • KeT
    2016-07-28 10:53:38

    这个,你下两节就可以学到,为何collections.sort(StringBuilder类)不行。我也是刚知道。。。

  • KeT
    2016-07-28 10:41:27

    首先你的List<StringBuilder> strList=new ArrayList<StringBuilder>();,得放在main方法里,还有StringBuilder strbd=new StringBuilder();,这个得放在for循环里,因为如果不放在for循环,他不会重新构造个对象,然后当一直是同一个对象时,使用它的append方法在后边添加字符时,你只会产生一个字符串,不会产生十个随机字符串。然后sort排序为何报错,我觉得可能是没有StringBuilder类的排序,虽然它也是属于String类型。下面是我修改你的代码后的代码。

    import java.util.ArrayList;
    
    import java.util.Collections;
    import java.util.List;
    import java.util.Random;
    
    public class TempTest {
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    	 List<String> strList=new ArrayList<String>();
    String st="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    
    //StringBuilder str;
    Random random=new Random();
    for (int i = 0; i < 10; i++) {
    	StringBuilder strbd=new StringBuilder();
    
    do {
    int length=random.nextInt(10);
    for (int j = 0; j < length; j++) {
    strbd.append(st.charAt(random.nextInt(62)));
    }
    } while (strList.contains(strbd));
    strList.add(strbd.toString());
    }
        
    Collections.sort(strList);
    System.out.println("---------------排序前--------------------");
    for(String sl : strList)
    System.out.println(sl);
    
    System.out.println("---------------排序后--------------------");
    for(String sl : strList)
    System.out.println(sl);
    
    }
    
    }


  • 凡人不羡仙
    2016-07-27 22:57:57

    List<StringBuilder> strList=new ArrayList<StringBuilder>();
    你把这一句放进main方法里就可以了,mian方法是个static修饰的方法