package com.liupanpan.test;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.TreeSet;
public class Test4 {
/**
* 需求: 在一个集合中存储了无序并且重复的字符串,定义一个方法,让其有序(字典顺序),而且还不能去除重复
* 分析
* 1,需要定义一个ArrayList集合并向集合中添加String类型的元素
* 2,定义一个方法,将集合中无序的元素排序并且保留重复元素
*/
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("heima");
list.add("heima");
list.add("a");
list.add("a");
list.add("xuexi");
list.add("xuexi");
list.add("java");
list.add("java");
sort(list);
System.out.println(list);
}
/*定义一个方法
* 1,在方法中创建一个TreeSet集合,因为TreeSet自身的比较功能会删除重复的元素,而需求是保留重复的元素,所以需要外在的比较器
* 2,将ArrayList集合中的元素全部添加到TreeSet集合中
* 3,清除ArrayList集合中的元素
* 4,将TreeSet集合中的元素添加到ArrayList集合中
* 5,打印ArrayList集合
*/
public static void sort(ArrayList<String> list) {
TreeSet<String> ts = new TreeSet<String>(new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
int num =s1.compareTo(s2);//s1是调用的的元素,s2是集合中的元素
return num == 0? 1:num;
}
});
ts.addAll(list);
list.clear();
list.addAll(ts);
}
}
/*所涉及的知识点
* 1,TreeSet是Set接口的另一个实现类,他的内部采用自平衡的排序二叉树来储存元素,这样的结构可以保证TreeSet集合中没有重复的元素,并且可以对元素进行排序
* 2,compareTo()方法对集合中的元素比较,是Comparable接口中定义的,因此要想对集合中的元素进行排序,就必须实现Comparable接口,重写compareTo()方法
* 3,匿名内部类,格式new 类名或者接口名(){
* 重写方法;
* };
*/
|
|