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 }
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 }
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 }
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 }
涉及的完整代码:http://www.cnblogs.com/jfl-xx/p/4707643.html