TreeSet典型例子两个 比较器?

Posted 君子攸宁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TreeSet典型例子两个 比较器?相关的知识,希望对你有一定的参考价值。

package com.runoob.Collection;

import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;

/*
 * 联系:对多个字符串(不重复)按照长度排序(由短到长)
 * 思路:
 * 1.多个字符串,需要容器存储
 * 2.选择哪个容器。字符串是对象,可以选择集合,而且不重复,选择set集合
 * 3.还需要排序,可以选择TreeSet集合
 */
public class TreeSetTest {
	public static void main(String[] args) {
		
		//sortStringbyLength();
		sortStringbyLength2();

	}

	public static void sortStringbyLength(){

		Set set = new TreeSet(new ComparatorByLength());

		set.add("hahaha");
		set.add("ab");
		set.add("xxxx");
		set.add("ttt");
		set.add("lalalalala");

		for(Object obj : set){
			System.out.println(obj);
		}
	}


	/*
	 * 练习5:对多个字符串(重复),按照长度排序
	 * 思路:
	 * 1.能使用TreeSet吗?不能,
	 * 2.可以存储到数组,list,这里先选择数组
	 */

	public static void sortStringbyLength2(){

		String [] arr ={"hahaha","abccc","xixi","nba","cctv","zero","hahaha","xixi"};
		
		//自然排序可以使用String类中的compareTo方法
		//但是现在要的是按照长度排序,这就需要比较器
		
		//定以一个按照长度排序的比较器对象
		Comparator comp = new ComparatorByLength();
		
		for(int x=0;x<arr.length-1;x++){
			for(int y =x+1;y<arr.length;y++){
			//	if(arr[x].compareTo(arr[y])>0){//按照字典书序
				if(comp.compare(arr[x], arr[y])>0)//按照长度顺序
					swap(arr,x,y);
				}
			}
		
		
		for(String s : arr){
			System.out.println(s);
		}
		
	}

	private static void swap(String[] arr, int x, int y) {
		// TODO Auto-generated method stub
		String temp = arr[x];
		arr[x] = arr[y];
		arr[y] =temp;
	}
}

  ========================

package com.runoob.Collection;

import java.util.Comparator;

public class ComparatorByLength implements Comparator {

	@Override
	public int compare(Object o1, Object o2) {
		
		//对字符串按照长度比较
		String s1 =(String)o1;
		String s2 =(String)o2;
		
		//比较长度
		int temp =s1.length()-s2.length();
		
		//长度相同,再按照字典顺序
		return temp==0?s1.compareTo(s2):temp;
		
	}

}

  

以上是关于TreeSet典型例子两个 比较器?的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE基础 TreeSet集合(红黑树数据结构)

《java入门第一季》之集合框架TreeSet存储元素自然排序以及图解

JAVA-初步认识-常用对象API(集合框架-treeset集合-二叉树)

TreeSet类的排序问题

38各Set实现类的性能分析

HashSet,TreeSet和LinkedHashSet的区别