0.描述
/**
* 目标:给字符串列表元素排序;
* 步骤:1.随机生成10对字符串;
* 2.调用sort方法排序;
* 要求:生成的字符串内容不相同;字符可以相同;字符串长度为10以内;
*/
1.程序与结果
import java.util.*;
public class CollectionsTest {
/**
* 目标:给字符串列表元素排序;
* 步骤:1.随机生成10对字符串;
* 2.调用sort方法排序;
* 要求:生成的字符串内容不相同;字符可以相同;字符串长度为10以内;
*/
public static void main(String[]args){
List list = generateStringList();
sortStringList(list);
}
//实现排序并打印的方法
public static void sortStringList(List<String> list){
System.out.println("排序前的list元素为:"+ Arrays.toString(list.toArray()));
Collections.sort(list);
System.out.println("-----------------------");
System.out.println("排序后的list元素为:"+ Arrays.toString(list.toArray()));
}
//随机生成存在10个字符串的列表
public static List generateStringList(){
List<String> list = new ArrayList<String>();
Random rand = new Random();
for(int i=0;i<10;i++){
String newStr = "";
do {
int randLen = rand.nextInt(10);
for (int j = 0; j <= randLen; j++) {
int randChar = 'a' + rand.nextInt(25);
newStr += (char) randChar;
}
list.add(newStr);
}while(!list.contains(newStr));
}
return list;
}
}
排序前的list元素为:[kcuit, tpoap, jtqj, mpadxu, uoydtjcyf, bk, ej, adk, xhjhwm, kedhgs]
-----------------------
排序后的list元素为:[adk, bk, ej, jtqj, kcuit, kedhgs, mpadxu, tpoap, uoydtjcyf, xhjhwm]
Process finished with exit code 0
2.改进
上面的方法生成的随机字符串只包括了小写字母;
我们希望加上数字和大写字母。
import java.util.*;
public class CollectionsTest2 {
/**
* 改进:生成的字符串当中,还应当包括大写字母和数字
*/
public static void main(String[]args){
List list = generateStringList();
sortStringList(list);
}
//实现排序并打印的方法
public static void sortStringList(List<String> list){
System.out.println("排序前的list元素为:"+ Arrays.toString(list.toArray()));
Collections.sort(list);
System.out.println("-----------------------");
System.out.println("排序后的list元素为:"+ Arrays.toString(list.toArray()));
}
//随机生成存在10个字符串的列表
public static List generateStringList(){
List<String> list = new ArrayList<String>();
Random rand = new Random();
for(int i=0;i<10;i++){
String newStr = "";
do {
int randLen = rand.nextInt(10);
for (int j = 0; j <= randLen; j++) {
int randCharType = rand.nextInt(3);//随机0,1,2分别表示小写,大写和数字
int randChar;//存储随机生成的字符
switch(randCharType){
case 0://小写
randChar = 'a' + rand.nextInt(25);
newStr += (char) randChar;
break;
case 1://大写
randChar = 'A' + rand.nextInt(25);
newStr += (char) randChar;
break;
case 2://数字
randChar = '0' + rand.nextInt(9);
newStr += (char) randChar;
break;
}
}
list.add(newStr);
}while(!list.contains(newStr));
}
return list;
}
}
排序前的list元素为:[w, rOG6C8L, 3L5a0, 25Eso47j8Q, Pad, 3, e3m1, 5Lc, j7RBbwE, KcNvXJP]
-----------------------
排序后的list元素为:[25Eso47j8Q, 3, 3L5a0, 5Lc, KcNvXJP, Pad, e3m1, j7RBbwE, rOG6C8L, w]
Process finished with exit code 0
其实上述随机生成大小写字母和数字的实现方法还有其他选择;
比如将0-9a-zA-Z放到数组或者字符串中,随机生成0-61的整数也可以实现。