java中的TreeSet集合

原创 2015年11月19日 18:40:54
package com.atguigujaav2;

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

/**
 * TreeSet实现了Set接口的子接口SortedSet,基本特征和HashSet类一样,
 * 只是增加了排序功能。
 * */
public class TestTreeSet {
	public static void main(String[] args){
		TreeSet s=new TreeSet();
		s.add(5);
		s.add(30);
		s.add(8);
		s.add(1);
		s.add(25);
		print(s);
	}
	public static void print(Collection c){
		Iterator iter=c.iterator();
		while(iter.hasNext()){
			Object obj=iter.next();
			System.out.println(obj);
		}
	}
}
/**
 * 输出结果是:1、5、8、25、30
 * 可见,TreeSet默认从小到大排序。
 * */
</pre><pre name="code" class="java">
</pre><pre name="code" class="java"><pre name="code" class="java">
/**
 * 向TreeSet添加的元素的数据类型必须实现处于java.Lang包下的Comparable接口,
 * 也就是要实现接口中的抽象方法,否则程序出现java.lang.ClassCastException异常。
 * API中的String 类型和封装类型已经实现了Comparable接口,接口中职业一个抽象方法:
 * public int compareTo(Object o),用来实现排序规则。如果不之下安该抽象方法
 * java就不知道如何排序,就会出现java.lang.ClassCastException异常。
 * 同时也要重写hashCode()方法和equals()方法。
 * */
package com.atguigujaav2;

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

/**
 * 向TreeSet集合中添加自定义的数据类型
 * */
public class TestTreeSet1 {
	public static void main(String[] args){
		TreeSet s=new TreeSet();
		s.add(new Student2(1004,"zhaoliu"));
		s.add(new Student2(1001,"zhangsan"));
		s.add(new Student2(1003,"wangwu"));
		s.add(new Student2(1002,"lisi"));
		s.add(new Student2(1001,"zhangsi"));
		s.add(new Student2(1001,"zhangsan"));
		print(s);
	}
	public static void print(Collection c){
		Iterator iter=c.iterator();
		while(iter.hasNext()){
			Object obj=iter.next();
			System.out.println(obj);
		}
	}
}
class Student2 implements Comparable{
	int id;
	String name;
	public Student2(){
		
	}
	public Student2(int id,String name){
		this.id=id;
		this.name=name;
	}
	
	public String toString(){
		return "id:"+id+'\t'+"name:"+name;
	}
	
	//重写equals()方法
	public boolean equals(Object obj){
		if(obj==null){
			return false;
		}
		
		if(obj==this){
			return true;
		}
		
		if(!(obj instanceof Student2)){
			return false;
		}
		Student2 s=(Student2)obj;
		return (s.id==this.id&&s.name.equals(this.name));
	}
	
	//重写hsahCode()方法
	public int hashCode(){
		return id*name.hashCode();
	}
	
	
	//重写compareTo()方法
	public int compareTo(Object o){
		Student2 s=null;
		if(o instanceof Student2){
			s=(Student2)o;
		}
		int result=0;
		result=this.id>s.id?1:(this.id==s.id?0:-1);
		if(result==0){
			result=this.name.compareTo(s.name);
		}
		return result;
	}
}
<pre name="code" class="java">/**
 * 向TreeSet中添加自定义一数据类型的元素时,除了可以实现Comparable接口,
 * 还可以使用比较器的方式来实现排序,具体做法是:定义比较器类实现java.util包下的
 * Comparator接口,重写其中的抽象方法compare(Object o1,Object o2)
 * 来定义比较规则,然后在实例化TreeSet对象调用TreeSet的有残构造器,在构造器中传递一个
 * 比较器对象即可.
 * */
package com.atguigujaav2;

import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

public class TestTreeSet2 {
	public static void main(String[] args){
		TreeSet s1=new TreeSet(new StudentComparator());
		s1.add(new Student3(1004,"zhaoliu"));
		s1.add(new Student3(1001,"zhangsan"));
		s1.add(new Student3(1003,"wangwu"));
		s1.add(new Student3(1002,"lisi"));
		s1.add(new Student3(1001,"zhangsi"));
		s1.add(new Student3(1001,"zhangsan"));
		print(s1);
	}
	public static void print(Collection c){
		Iterator iter=c.iterator();
		while(iter.hasNext()){
			Object obj=iter.next();
			System.out.println(obj);
		}
	}
}
class Student3{
	int id;
	String name;
	public Student3(){
		
	}
	public Student3(int id,String name){
		this.id=id;
		this.name=name;
	}
	
	//重写equals方法
	public boolean equals(Object obj){
		if(obj==null){
			return false;
		}
		
		if(obj==this){
			return true;
		}
		
		if(!(obj instanceof Student3)){
			return false;
		}
		Student3 s=(Student3)obj;
		return (s.id==this.id&&s.name.equals(this.name));
	}
	//重写hashCode方法
	public int hashCode(){
		return id*name.hashCode();
	}
	
	public String toString(){
		return "id:"+id+'\t'+"name:"+name;
	}
}
class StudentComparator implements Comparator{
	public int compare(Object arg0,Object arg1){
		Student3 s1=(Student3)arg0;
		Student3 s2=(Student3)arg1;
		int result=0;
		result=s1.id>s2.id?1:(s1.id==s2.id?0:-1);
		if(result==0){
			result=s1.name.compareTo(s2.name);
		}
		return result;
	}
}






</pre><pre name="code" class="java">


Java中TreeSet的用法

Java中 TreeMap和TreeSet算是java集合类里面比较有难度的数据结构。和普通的HashMap不一样,普通的HashMap元素存取的时间复杂度一般是O(1)的范围,而TreeMap内部对...
  • u012050154
  • u012050154
  • 2016-05-20 10:37:38
  • 7617

java TreeSet的使用

java TreeSet的使用 2011-06-07 19:34 /*   TreeSet:它可以给Set集合中的元素进行指定方式的排序。         保证元素唯...
  • you_off3
  • you_off3
  • 2012-04-16 15:27:15
  • 37556

java的TreeSet类详解

集合 的体系: ------------| Collection 单例集合的根接口 ----------------| List  如果是实现了List接口的集合类,具备的特点: 有序,可重复。  -...
  • oguro
  • oguro
  • 2016-11-30 22:04:42
  • 2736

Java集合框架:常用的增删改查方法

1.ArrayList: 2.LinkedList: 3.HashSet: 4.TreeSet: 5.HashMap: 6.TreeMap:
  • u013692310
  • u013692310
  • 2016-12-14 22:32:34
  • 1165

浅谈java中的TreeSet中的排序方式

TreeSet 和HashSet的区别 HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key Map的key和Set都有一个共同的特性...
  • mingxin95
  • mingxin95
  • 2016-05-25 11:14:27
  • 2088

java之Treeset

转载自:http://jingyan.baidu.com/article/4b07be3c68bd2748b380f329.html TreeSet()          构造一个新的空 set,该...
  • u010366748
  • u010366748
  • 2016-07-25 12:41:42
  • 950

java中 TreeSet类用法

/*TreeSet的性能比 HashSet差但是我们 在需要排序的时候可以用TreeSet 因为他是自然排序也就是 升序 下面是TreeSet实现代码 这个类也似只能通过迭代器迭代元素*/import...
  • yue7603835
  • yue7603835
  • 2011-08-09 12:08:36
  • 7519

Java集合之TreeSet

TreeSet 阅读这篇文章只需5-10分钟。
  • wxc880924
  • wxc880924
  • 2016-09-22 16:58:37
  • 2196

【奔跑的菜鸟】Java中TreeSet的自定义排列顺序

在Java编程中有时会用到TreeSet这个类,这个类会对里面的key进行自动的排序。一般是进行自然序列排序,但是自然序列排序,一般都没什么用。我们大多数情况下需要它按照我们自己要求的方式进行排序。下...
  • zl_nycsdn
  • zl_nycsdn
  • 2016-09-01 09:44:44
  • 314

java之TreeSet里添加自定义对象

以一个例子来说明: package javastudy; import java.util.Comparator; import java.util.Iterator; import ...
  • qq_32575047
  • qq_32575047
  • 2016-07-22 21:05:08
  • 1695
收藏助手
不良信息举报
您举报文章:java中的TreeSet集合
举报原因:
原因补充:

(最多只允许输入30个字)