java中set集合的使用方法

1. HashSet 

       Java.util.HashSet类实现了Java.util.Set接口。它有如下特点:
       1.它不允许出现重复元素;
       2.不保证集合中元素的顺序
       3.允许包含值为null的元素,但最多只能有一个null元素。
      下面代码是利用hashSet获取不重复的一组groupId:
public static List<Long> getGroups(List<Resource> resourceList) {
	Set<Long> set = new HashSet();
	for (Resource resource : resourceList) {
		if (StringUtils.isNotBlank(resource.groupIds)) {
			for (String groupId : StringUtils.split(resource.groupIds, ",")) {
				if (StringUtils.isNotBlank(groupId)) {
					set.add(Long.parseLong(groupId));
				}
			}
		}
	}
	return new ArrayList<Long>(set);
}

2. TreeSet

        TreeSet是可以实现排序等功能的集合,它在对象元素添加到集合中时会自动按照某种比较规则将其插入到有序的对象序列中;
        TreeSet支持两种排序方式:自然排序和客户化排序,默认情况下是自然排序.
        在JDK中,有一部分类实现了Comparable接口,如Integer,Double和String等,Comparable接口有一个compareTo(Object o)方法,它返回整数类型,对于表达式x.compareTo(y),如果返回值为0,表示x和y相等,如果返回值大于0,表示x大于y,如果小于0,表示x小于y。TreeSet调用对象的compareTo()方法比较集合中对象的大小,然后进行升序排序,这种方式称为自然排序.
        客户化排序:java.util.Comparator接口用于指定具体的排序方式,它有个compare(Object obj1,Object obj2),用于比较两个对象的大小.
        当表达式compare(x,y)的值大于0,表示x大于y,小于0,表示x小于y,等于0,表示x等于y,如果想让TreeSet进按照Customer对象的 name属性进行降序排列,可以先创建实现Comparator接口的类CustomerComparator,如:
 import java.util.*;
 public class CustomerComparator implements Comparator{
         public int compare(Object o1,Object o2){
                 Customer c1=(Custoemr)o1;
                 Customer c2=(Customer)o2;
                 if(c1.getName().compareTo(c2.getName())>0) return -1;
                 if(c1.getName().compareTo(c2.getName())<0) return 1;
                 return 0;
         } 
}
        接下来在构造TreeSet的实例时,调用它的TreeSet(Comparator comparator)构造方法
Set set = new TreeSet(new CustomerComparator());
Customer c1=new Customer("TOM",15);
Customer c2=new Customer("JACK",20);
Customer c3=new Customer("MIKE",38);
set.add(c1);
set.add(c2);
set.add(c3);
Iterator it=set.iterator();
while(it.hasNext()){
      Custoemr customer=(Customer)it.next();
      System.out.println(customer.getName()+"" +customer.getAge();)
}
         当TreeSet向集合中加入Customer对象时,会调用CustomerComparator类的compare()方法进行排序

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值