在学TreeSet类中,因为TreeSet类底层使二叉树,所以使用其排序时,得使用恰当,否则运行时会发生错误,还有的就是得学会用比较器排序。需要实现Comparable接口,并重写comparaTo方法,写出要排序的规则,比如说按字符串长度排序,还是按字母表的顺序排序,都得自己在里面实现。
以下是两个小程序,分别实现的功能有:
1.在一个集合中存储了无序并且重复的字符串,将其排序且不删除重复。
2.输入一串字符串,对其中所有字符进行排序。
package pra_12;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
import java.util.TreeSet;
public class J_25 {
/**
* @param args
*/
public static void main(String[] args) {
//1.在一个集合中存储了无序并且重复的字符串,将其排序且不删除重复
ArrayList<String> list=new ArrayList<>();
list.add("aaa");
list.add("b");
list.add("aaccca");
list.add("ddd");
list.add("aaa");
list.add("aasdasaa");
sort(list);
System.out.println(list); //[aaa, aaa, aaccca, aasdasaa, b, ddd]
//2.输入一串字符串,对其中所有字符进行排序
Scanner sc=new Scanner(System.in);
String line=sc.nextLine(); //fdsifunksafdsfsdnf
char[] arr=line.toCharArray();
TreeSet<Character> ts=new TreeSet<Character>(new Comparator<Character>(){
@Override
public int compare(Character o1, Character o2) {
int num=o1-o2;
return num==0?-1:num;
}
});
for(char c:arr){
ts.add(c);
}
for (Character character : ts) {
System.out.print(character); //adddfffffiknnssssu
}
}
//1.
public static void sort(List<String> list){
TreeSet<String> ts=new TreeSet<>(new Comparator<String>(){ //用匿名内部类实现Comparator接口
@Override
//重写compare方法
public int compare(String o1, String o2) {
int num=o1.compareTo(o2);
return num==0?-1:num; //为了使重复的字符串能存进去
}
});
ts.addAll(list);
list.clear();
list.addAll(ts);
}
}