Java——TreeSet类通过使用比较器排序,实现给字符串排序且不删除重复字符

本文介绍如何使用Java的TreeSet类进行字符串和字符的排序,包括如何处理重复元素和自定义排序规则,通过实现Comparable接口和Comparator接口来满足不同的排序需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学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);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值