Java集合——Set接口

时间:2022-03-31 14:47:59

1.定义

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

2.方法

add():添加元素

remove():移除指定元素

.......

TreeSet中常用的方法:

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

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

pollFirst():获取并且移除第一个元素,pollLast():获取并且移除最后一个元素

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.实例                  

 1 import static org.junit.Assert.*;
 2 import java.util.Comparator;
 3 import java.util.HashSet;
 4 import java.util.LinkedHashSet;
 5 import java.util.Set;
 6 import java.util.TreeSet;
 7 import org.junit.Test;
 8 
 9     public class SetTest {
10     @Test   
11     // HashSet实现类可以放入空值;向HashSet集合中传入元素时,HashSet会调用该对象的HashCode方法获取Hash值,然后决定存储位置(无序)
12     public void testHashSet() {
13         Set c1=new HashSet();    
14         c1.add(new Customer(1,"AAA"));
15         c1.add(new Customer(1,"AAA"));
16         c1.add(new Customer(2,"AAA"));
17         c1.add(null);
18         System.out.println(c1.size());    
19         for(Object c:c1){
20             System.out.println(c);
21         } 
22     }

Java集合——Set接口

 

 1     @Test
 2     //linkedHashSet是HashSet的子类,不允许重复的值,使用HashCode确定在集合中的位置,使用链表的方式确定位置(有序,按照输入的顺序输出)
 3     public void testLinkedHashSet(){
 4         Set c2=new LinkedHashSet();
 5         c2.add(new Customer(1,"AAA"));
 6         c2.add(new Customer(3,"CCC"));
 7         c2.add(new Customer(2,"BBB"));
 8         for(Object c:c2){
 9             System.out.println(c);
10         }        
11     } 

Java集合——Set接口

 

 1    @Test   
 2  /*   TreeSet内部排序:
 3        默认情况下,直接使用TreeSet无参构造器创建Set的对象,在其中放入元素时,必须实现Comparable接口(用于排序),按照compareTo方法排序*/
 4     public void testTreeSet1(){
 5         TreeSet c3=new TreeSet();
 6         c3.add(new Customer(1,"AAA"));
 7         c3.add(new Customer(3,"CCC"));
 8         c3.add(new Customer(2,"BBB"));       
 9         Customer c31=new Customer(4,"DDD");
10         c3.add(c31);
11         for(Object c:c3){
12             System.out.println(c);
13         } 
14         Object obj;
15             //first返回第一个元素,last返回最后一个元素
16         obj=c3.first();               
17         System.out.println(obj);
18             //lower返回指定元素的上一个元素,higher指定元素的下一个元素
19         obj=c3.lower(c31);
20         System.out.println(obj);
21            //SortedSet接口的subSet方法返回指定区域的元素,范围是[a,b)
22         Set c32=c3.subSet(c3.first(), c31);
23         System.out.println(c32);
24            //SortedSet接口的headSet方法返回指定元素之前的所有元素,范围为[first,b);tailSet返回指定元素后的所有元素,范围为[b,end]
25         obj=c3.headSet(c31);
26         System.out.println(obj);
27     }   

Java集合——Set接口
   

 1 @Test
 2     /*TreeSet内部排序:
 3        若创建TreeSet对象时,传入了一个实现Comparator接口的类,则TreeSet使用Comparator接口的compare方法排序。此时集合中的元素无需实现Comparable接口;
 4        如果同时放入了实现Comparable接口的元素,以Comparator为标准。*/
 5     public void testTreeSet2(){
 6         Comparator comparator=new CustomerComparator();
 7         TreeSet c4=new TreeSet(comparator);
 8         c4.add(new Customer(1,"AAA"));
 9         c4.add(new Customer(3,"CCC"));
10         c4.add(new Customer(2,"BBB"));       
11         Customer c41=new Customer(4,"DDD");
12         c4.add(c41);
13         for(Object c:c4){
14             System.out.println(c);
15         }  
16     }
17 }

Java集合——Set接口

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