java的set接口_Java集合——Set接口

标签:

1.定义

set中不允许放入重复的元素,使用equals()方法进行比较。如果返回true,两个对象的HashCode值也应该相等

2.方法

add():添加元素

remove():移除指定元素

.......

TreeSet中常用的方法:

first():返回第一个元素,last返回最后一个元素

lower():返回指定元素的上一个元素,higher():指定元素的下一个元素

SortedSet接口的subSet(a,b):返回指定区域的元素,范围为[a,b)

SortedSet接口的headSet(first,b):返回指定元素之前的所有元素,范围为[first,b);tailSet(b,end):返回指定元素后的所有元素,范围为[b,end]

3.常用实现类

HashSet:可以放入空值;向HashSet集合中传入元素时,HashSet会调用该对象的HashCode方法获取Hash值,然后决定存储位置(无序)

LinkedHashSet:HashSet的子类,不允许重复的值,使用HashCode确定在集合中的位置,使用链表的方式确定位置(有序,按照输入的顺序输出)

TreeSet:1.默认情况下,直接使用TreeSet无参构造器创建Set的对象,在其中放入元素时,必须实现Comparable接口(用于排序),按照compareTo方法排序;

2.若创建TreeSet对象时,传入了一个实现Comparator接口的类,则TreeSet使用Comparator接口的compare方法排序.此时集合中的元素无需实现

Comparable接口;如果放入了实现Comparable接口的元素,以Comparator为标准

注:<1>Object类提供的toString方法总是返回该对象实现类的类名+@+hashCode(16进制数)值,可以通过重写toString方法来输出自己希望的形式。

<2>如果把一个对象放入HashSet中时,如果重写该对象equals()方法,也应该重写其hashCode()方法。

4.实例

import static org.junit.Assert.*;

import java.util.Comparator;

import java.util.HashSet;

import java.util.LinkedHashSet;

import java.util.Set;

import java.util.TreeSet;

import org.junit.Test;

public class SetTest {

@Test

// HashSet实现类可以放入空值;向HashSet集合中传入元素时,HashSet会调用该对象的HashCode方法获取Hash值,然后决定存储位置(无序)

public void testHashSet() {

Set c1=new HashSet();

c1.add(new Customer(1,"AAA"));

c1.add(new Customer(1,"AAA"));

c1.add(new Customer(2,"AAA"));

c1.add(null);

System.out.println(c1.size());

for(Object c:c1){

System.out.println(c);

}

}

20180110163623006684.png

@Test

//linkedHashSet是HashSet的子类,不允许重复的值,使用HashCode确定在集合中的位置,使用链表的方式确定位置(有序,按照输入的顺序输出)

public void testLinkedHashSet(){

Set c2=new LinkedHashSet();

c2.add(new Customer(1,"AAA"));

c2.add(new Customer(3,"CCC"));

c2.add(new Customer(2,"BBB"));

for(Object c:c2){

System.out.println(c);

}

}

20180110163623009614.png

@Test

/*   TreeSet内部排序:

默认情况下,直接使用TreeSet无参构造器创建Set的对象,在其中放入元素时,必须实现Comparable接口(用于排序),按照compareTo方法排序*/

public void testTreeSet1(){

TreeSet c3=new TreeSet();

c3.add(new Customer(1,"AAA"));

c3.add(new Customer(3,"CCC"));

c3.add(new Customer(2,"BBB"));

Customer c31=new Customer(4,"DDD");

c3.add(c31);

for(Object c:c3){

System.out.println(c);

}

Object obj;

//first返回第一个元素,last返回最后一个元素

obj=c3.first();

System.out.println(obj);

//lower返回指定元素的上一个元素,higher指定元素的下一个元素

obj=c3.lower(c31);

System.out.println(obj);

//SortedSet接口的subSet方法返回指定区域的元素,范围是[a,b)

Set c32=c3.subSet(c3.first(), c31);

System.out.println(c32);

//SortedSet接口的headSet方法返回指定元素之前的所有元素,范围为[first,b);tailSet返回指定元素后的所有元素,范围为[b,end]

obj=c3.headSet(c31);

System.out.println(obj);

}

20180110163623022308.png

@Test

/*TreeSet内部排序:

若创建TreeSet对象时,传入了一个实现Comparator接口的类,则TreeSet使用Comparator接口的compare方法排序。此时集合中的元素无需实现Comparable接口;

如果同时放入了实现Comparable接口的元素,以Comparator为标准。*/

public void testTreeSet2(){

Comparator comparator=new CustomerComparator();

TreeSet c4=new TreeSet(comparator);

c4.add(new Customer(1,"AAA"));

c4.add(new Customer(3,"CCC"));

c4.add(new Customer(2,"BBB"));

Customer c41=new Customer(4,"DDD");

c4.add(c41);

for(Object c:c4){

System.out.println(c);

}

}

}

20180110163623035003.png

涉及的完整代码:http://www.cnblogs.com/jfl-xx/p/4707643.html

标签:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值