加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

TreeSet

发布时间:2020-12-15 07:24:35 所属栏目:Java 来源:网络整理
导读:HashSet 是无序的,如果要对集合实现排序,那么就需要使用TreeSet 让TreeSet 实现集合有序 当 TreeSet中元素是基本数据类型时: package test; import java.util.Iterator;import java.util.TreeSet;public class TreeSetDemo {/** * TreeSet中放置基本类型 *

HashSet 是无序的,如果要对集合实现排序,那么就需要使用TreeSet

让TreeSet 实现集合有序

当 TreeSet中元素是基本数据类型时:

package test;
import java.util.Iterator; import java.util.TreeSet; public class TreeSetDemo { /** * TreeSet中放置基本类型 * @param args */ public static void main(String[] args) { demo1(); } //创建类TreeSetDemo的静态方法 public static void demo1() { TreeSet ts = new TreeSet(); ts.add("abc"); ts.add("zaa"); ts.add("aa"); ts.add("nba"); ts.add("cba"); Iterator it = ts.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } }

 输出结果为:无序,但是这看似无序的集合其中却是有序的,字符串按照字典顺序排序输出。

?

?

?

当 TreeSet中的元素是一个对象时:

package test;

import java.util.Iterator;
import java.util.TreeSet;

public class TreeSetDemo {
	/**
	 * TreeSet中放置基本类型
	 * @param args
	 */
	/*
	public static void main(String[] args) {
		demo1();
	}
	
	//创建类TreeSetDemo的静态方法
	public static void demo1() {
		TreeSet ts = new TreeSet();
		
		ts.add("abc");
		ts.add("zaa");
		ts.add("aa");
		ts.add("nba");
		ts.add("cba");
		
		Iterator it = ts.iterator();
		
		while(it.hasNext()){
			System.out.println(it.next());
		}
	}*/
	
	
	/**
	 * TreeSet中放置类          
	 *  此时会报错 ,查看错误原因:java.lang.ClassCastException: test.Person cannot be cast to java.lang.Comparable
	 *  类装换异常
	 * @param args
	 */
	public static void main(String[] args) {
TreeSet ts = new TreeSet();
		ts.add(new Person("lisi",21));
		ts.add(new Person("zhangsan",28));
		
		ts.add(new Person("zhaoliu",25));
		ts.add(new Person("zhouqi",29));
		ts.add(new Person("wangu",24));
		
		Iterator it = ts.iterator();
		
		while(it.hasNext()){
			Person p = (Person)it.next();
			
			System.out.println(p.getName()+":"+p.getAge());
		}
	}
}

查看结果:
Exception in thread "main" java.lang.ClassCastException: test.Person cannot be cast to java.lang.Comparable at java.util.TreeMap.compare(Unknown Source) at java.util.TreeMap.put(Unknown Source) at java.util.TreeSet.add(Unknown Source) at test.TreeSetDemo.main(TreeSetDemo.java:42)
原因
:TreeSet中存放的自定义类必须实现comparator接口
//自定义类package test;

public class Person{
 
	private String name;
	private int age;
	
	//无参构造
	public Person() {
		super();	
	}
	
	//带参构造
	public Person(String name,int age) {
		super();
		this.name = name;
		this.age = age;
	}
	
	
	//重写hashCode()方法
	@Override
	public int hashCode() {
		return name.hashCode()+age*27;       //将age和name设置成为hashCode。
	}
	
	//重写Object的equals() 方法
	@Override
	public boolean equals(Object obj) {
		
		if(this == obj)
			return true;
		if(!(obj instanceof Person))
			throw new ClassCastException("类型错误");
		
//		System.out.println(this+"....equals....."+obj);
		Person p = (Person)obj;
		return this.name.equals(p.name) && this.age == p.age;   //通过对比当前对象与下个将要比较的对象的姓名和age 是否相同来确定是否为同一个对象。
	}
	
 
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String toString(){
		return name+":"+age;
	}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读