Java类集--Set接口、HashSet、TreeSet、SortedSet接口

Set接口的定义


Collection就不能进行双向输出,因为没有提供get()方法,但是Set接口与Collection接口的定义一致,所以其本身也不能双向输出。
HashSet:使用散列的方式存放内容,本身没有顺序。
import java.util.HashSet ;
import java.util.Set ;
public class HashSetDemo01{
	public static void main(String args[]){
		Set<String> allSet = new HashSet<String>() ;
		allSet.add("A") ;	// 增加内容
		allSet.add("B") ;	// 增加内容
		allSet.add("C") ;	// 增加内容
		allSet.add("C") ;	// 重复内容
		allSet.add("C") ;	// 重复内容
		allSet.add("D") ;	// 增加内容
		allSet.add("E") ;	// 增加内容
		System.out.println(allSet) ;
	}
};

执行结果中可以看出插入的顺序是无序排列的,而List接口的内同插入的顺序是其保存的顺序。
如果现在希望所有的内容可以自动进行排序的操作,则可以使用Set中的第二个子类————TreeSet.
import java.util.TreeSet ;
import java.util.Set ;
public class TreeSetDemo01{
	public static void main(String args[]){
		Set<String> allSet = new TreeSet<String>() ;
		allSet.add("C") ;	// 增加内容
		allSet.add("C") ;	// 重复内容
		allSet.add("C") ;	// 重复内容
		allSet.add("D") ;	// 增加内容
		allSet.add("B") ;	// 增加内容
		allSet.add("A") ;	// 增加内容
		allSet.add("E") ;	// 增加内容
		System.out.println(allSet) ;
	}
};

TreeSet类的内容是可以排序的,那么任意给出一个类,观察能否进行排序。
import java.util.Set ;
import java.util.TreeSet ;
class Person{
	private String name ;
	private int age ;
	public Person(String name,int age){
		this.name = name ;
		this.age = age ;
	}
	public String toString(){
		return "姓名:" + this.name + ";年龄:" + this.age ;
	}
};
public class TreeSetDemo02{
	public static void main(String args[]){
		Set<Person> allSet = new TreeSet<Person>() ;
		allSet.add(new Person("张三",30)) ;
		allSet.add(new Person("李四",31)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("赵六",33)) ;
		allSet.add(new Person("孙七",33)) ;
		System.out.println(allSet) ;
	}
};



import java.util.Set ;
import java.util.TreeSet ;
class Person implements Comparable<Person>{
	private String name ;
	private int age ;
	public Person(String name,int age){
		this.name = name ;
		this.age = age ;
	}
	public String toString(){
		return "姓名:" + this.name + ";年龄:" + this.age ;
	}
	public int compareTo(Person per){
		if(this.age>per.age){
			return 1 ;
		}else if(this.age<per.age){
			return -1 ;
		}else{
			return 0 ;
		}
	}
};
public class TreeSetDemo03{
	public static void main(String args[]){
		Set<Person> allSet = new TreeSet<Person>() ;
		allSet.add(new Person("张三",30)) ;
		allSet.add(new Person("李四",31)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("赵六",33)) ;
		allSet.add(new Person("孙七",33)) ;
		System.out.println(allSet) ;
	}
};



import java.util.Set ;
import java.util.TreeSet ;
class Person implements Comparable<Person>{
	private String name ;
	private int age ;
	public Person(String name,int age){
		this.name = name ;
		this.age = age ;
	}
	public String toString(){
		return "姓名:" + this.name + ";年龄:" + this.age ;
	}
	public int compareTo(Person per){
		if(this.age>per.age){
			return 1 ;
		}else if(this.age<per.age){
			return -1 ;
		}else{
			return this.name.compareTo(per.name) ;	// 调用String中的compareTo()方法
		}
	}
};
public class TreeSetDemo04{
	public static void main(String args[]){
		Set<Person> allSet = new TreeSet<Person>() ;
		allSet.add(new Person("张三",30)) ;
		allSet.add(new Person("李四",31)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("赵六",33)) ;
		allSet.add(new Person("孙七",33)) ;
		System.out.println(allSet) ;
	}
};

此时去掉的重复元素并不是真正意义上的重复元素的取消。
import java.util.Set ;
import java.util.HashSet ;
class Person{
	private String name ;
	private int age ;
	public Person(String name,int age){
		this.name = name ;
		this.age = age ;
	}
	public String toString(){
		return "姓名:" + this.name + ";年龄:" + this.age ;
	}
};
public class RepeatDemo01{
	public static void main(String args[]){
		Set<Person> allSet = new HashSet<Person>() ;
		allSet.add(new Person("张三",30)) ;
		allSet.add(new Person("李四",31)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("赵六",33)) ;
		allSet.add(new Person("孙七",33)) ;
		System.out.println(allSet) ;
	}
};



import java.util.Set ;
import java.util.HashSet ;
class Person{
	private String name ;
	private int age ;
	public Person(String name,int age){
		this.name = name ;
		this.age = age ;
	}
	public boolean equals(Object obj){	// 覆写equals,完成对象比较
		if(this==obj){
			return true ;
		}
		if(!(obj instanceof Person)){
			return false ;
		}
		Person p = (Person)obj ;	// 向下转型
		if(this.name.equals(p.name)&&this.age==p.age){
			return true ;
		}else{
			return false ;
		}
	}
	public int hashCode(){
		return this.name.hashCode() * this.age	; // 定义一个公式
	}
	public String toString(){
		return "姓名:" + this.name + ";年龄:" + this.age ;
	}
};
public class RepeatDemo02{
	public static void main(String args[]){
		Set<Person> allSet = new HashSet<Person>() ;
		allSet.add(new Person("张三",30)) ;
		allSet.add(new Person("李四",31)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("赵六",33)) ;
		allSet.add(new Person("孙七",33)) ;
		System.out.println(allSet) ;
	}
};

SortedSet接口:


import java.util.SortedSet ;
import java.util.TreeSet ;
public class TreeSetDemo05{
	public static void main(String args[]){
		SortedSet<String> allSet = new TreeSet<String>() ;	// 
		allSet.add("A") ;	// 增加内容
		allSet.add("B") ;	// 增加内容
		allSet.add("C") ;	// 增加内容
		allSet.add("C") ;	// 增加内容
		allSet.add("C") ;	// 增加内容
		allSet.add("D") ;	// 增加内容
		allSet.add("E") ;	// 增加内容
		System.out.println("第一个元素:" + allSet.first()) ;
		System.out.println("最后一个元素:" + allSet.last()) ;
		System.out.println("headSet元素:" + allSet.headSet("C")) ;
		System.out.println("tailSet元素:" + allSet.tailSet("C")) ;
		System.out.println("subSet元素:" + allSet.subSet("B","D")) ;
	}
};


总结:



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值