Set集合学习详情笔记

  Set集合中的对象不按特定的方式排序,只是简单地把对象加入集合中,但set集合中不能包含重复对象。
  Set集合由Set接口和Set接口的实现类组成。Set接口继承了Collection接口,因此包含Collection
  接口的所有方法。
  Set的构造有一个约束条件,传入的Collection对象不能有重复值,必须小心操作可变对象。如果一个Set
  中的可变元素改变了自身状态导致Object.equals(Object)=true,则会出现一些问题。

 Set接口常用的实现类有HashSet类与TreeSet类
 HashSet类实现Set接口,由哈希表支持。它不保证Set的迭代顺序,特别是它不保证该顺序恒久不变。此类允许
 使用null元素。
 TreeSet类不仅实现了Set接口,还实现了java.util.SortedSet接口,因此,TreeSet类实现的
 Set集合在遍历集合时按照自然顺序递增排序,也可以按照指定比较器递增排序,即可以通过比较器对用
 TreeSet集合中的对象进行排序。

例如:在项目中创建UpdateStu,实现Comparable接口,重写该接口的compareTo()方法。在主方法中创建Update对象,创建集合,并将UpdateStu对象添加到集合中。遍历集合中的全部元素,以及通过headSet()、subSet()方法获得的部分集合。

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


public class UpdateStu implements Comparable<Object>{
	String name;
	long id;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public UpdateStu(String name, long id) {
		this.name = name;
		this.id = id;
	}
	@Override
	public int compareTo(Object o) {
		UpdateStu upstu = (UpdateStu)o;
		int result = id>upstu.id?1:(id==upstu.id?0:-1);
		return result;
	}
	public static void main(String[] args) {
		UpdateStu stu1 = new UpdateStu("王同学",01011);
		UpdateStu stu2 = new UpdateStu("张同学",01021);
		UpdateStu stu3 = new UpdateStu("李同学",01051);
		UpdateStu stu4 = new UpdateStu("赵同学",01012);
		TreeSet<UpdateStu> tree = new TreeSet<>();
		tree.add(stu1);
		tree.add(stu2);
		tree.add(stu3);
		tree.add(stu4);
		Iterator<UpdateStu> it = tree.iterator();//创建迭代器
		System.out.println("Set集合中的所有元素:");
		while(it.hasNext()){//遍历集合
			UpdateStu stu =(UpdateStu)it.next();//it.next()方法返回的是Object对象
			System.out.println(stu.getId()+" "+stu.getName());
		}
		//first方法:返回此Set集合中当前第一个元素
		System.out.println("Set集合中第一个元素:");
		System.out.println(tree.first().getId()+" "+tree.first().getName());
		//headSet方法:返回一个新的集合,新集合是之前的所有对象
		it = tree.headSet(stu2).iterator();
		System.out.println("截取前面部分的集合:");
		while(it.hasNext()){
			UpdateStu stu = (UpdateStu)it.next();
			System.out.println(stu.getId()+" "+stu.getName());
		}
		//subSet(E fromElement,E fromElement)
		//返回的是一个新的集合,是fromElement(包含)对象与fromElement(不包含)对象之间的所有对象。
		it=tree.subSet(stu2, stu3).iterator();
		System.out.println("截取中间部分的集合:");
		while(it.hasNext()){
			UpdateStu stu = (UpdateStu)it.next();
			System.out.println(stu.getId()+" "+stu.getName());
		}
	}
}

运行结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值