1.定义
set中不允许放入重复的元素(元素相同时只取一个)。它使用equals()方法进行比较,如果返回true,两个对象的HashCode值也应该相等。
2.方法
TreeSet中常用的方法:
boolean add(E e):添加一个元素,如果set中不存在该元素
boolean addAll(Collection extends E> c):向set添加集合
E ceiling(E e):返回大于等于给定元素的最小元素,没有返回null
void clear():移除所有元素
Object clone():浅拷贝集合
boolean contains(Object o):判断set是否包含某元素
E first():返回set的第一个元素
E last():返回set的最后一个元素
E floor(E e):返回给定元素的上一元素
E higher(E e):返回比给定元素大的最小元素
E lower(E e):返回比给定元素小的最大元素
SortedSet
SortedSet
SortedSet
NavigableSet
NavigableSet
boolean isEmpty():判断set是否为空
Iterator
E pollFirst():移除第一个元素,返回null如果set为空
E pollLast():移除最后一个元素,返回null如果set为空
boolean remove(Object o):移除指定元素
int size():返回集合元素数目
3.常用实现类
3.1 HashSet
1)可以放入空值;
2)传入元素时,调用HashCode方法获取hash值,然后决定存储位置;
3.2 LinkedHashSet
1)HashSet的子类,使用HashCode确定在集合中的位置,使用链表的方式确定位置(有序,按照输入的顺序输出)
3.3 TreeSet
1)默认情况下,直接使用TreeSet无参构造器创建Set的对象,在其中放入元素时,必须实现Comparable接口(用于排序),
按照compareTo方法排序;
2)若创建TreeSet对象时,传入了一个实现Comparator接口的类,则TreeSet使用Comparator接口的compare方法排序,
此时集合中的元素无需实现Comparable接口;如果放入了实现Comparable接口的元素,以Comparator为标准 。
4. 示例
4.1 SetFunc.java
1 import java.util.*; 2 3 public class SetFunc { 4 5 public static void main(String[] args){ 6 7 // HashSet 8 Setc1 = new HashSet<>(); 9 c1.add(new Customer(1,"AAA")); 10 c1.add(new Customer(1,"AAA")); 11 c1.add(new Customer(2,"AAA")); 12 c1.add(null); 13 System.out.println(c1.size()); // 3 14 for(Customer c:c1){ 15 System.out.println(c); 16 } 17 18 19 // LinkedHashSet 20 Set c2 = new LinkedHashSet<>(); 21 c2.add(new Customer(1,"AAA")); 22 c2.add(new Customer(3,"CCC")); 23 c2.add(new Customer(2,"BBB")); 24 for(Customer c:c2){ 25 System.out.println(c); 26 } 27 28 29 /* 30 * TreeSet 31 * 使用TreeSet()构造器 32 * 需要为Customer类实现Comparable接口,即实现compareTo方法 33 * */ 34 TreeSet c3 = new TreeSet<>(); 35 c3.add(new Customer(1,"AAA")); 36 c3.add(new Customer(3,"CCC")); 37 c3.add(new Customer(4,"DDD")); 38 c3.add(new Customer(5,"EEE")); 39 Customer b = new Customer(2,"BBB"); 40 for(Customer c:c3){ 41 System.out.println(c); 42 } 43 44 45 // first 46 Customer a = c3.first(); 47 System.out.println("first: "+a); // Customer:[Id=1, Name=AAA] 48 // last 49 Customer e = c3.last(); 50 System.out.println("last: "+e); // Customer:[Id=5, Name=EEE] 51 52 // ceiling 53 Customer ceil1 = c3.ceiling(b); 54 System.out.println("ceiling: : "+ceil1); // Customer:[Id=3, Name=CCC] 55 56 // lower 57 a = c3.lower(b); 58 System.out.println("lower b: "+a); // Customer:[Id=1, Name=AAA] 59 Customer pre = c3.lower(a); 60 System.out.println("lower a: "+pre); // null 61 // higher 62 Customer c = c3.higher(b); 63 System.out.println("higher b: "+c); // Customer:[Id=3, Name=CCC] 64 65 // floor 66 a = c3.floor(b); 67 System.out.println("floor b: "+a); // Customer:[Id=1, Name=AAA] 68 69 // subSet, [from, to) 70 Set c41 = c3.subSet(a, c); 71 System.out.println("c41: "+c41); 72 73 // headSet, [ , to) 74 Set c42 = c3.headSet(e); 75 System.out.println("c42: "+c42); 76 // headSet, [, to] 77 c42 = c3.headSet(e, true); 78 System.out.println("c42: "+c42); 79 80 // tailSet, [From, ] 81 Set c43 = c3.tailSet(c); 82 System.out.println("c43: "+c43); 83 // tailSet, (from, ] 84 c43 = c3.tailSet(c, false); 85 System.out.println("c43: "+c43); 86 87 88 /* 89 * TreeSet 90 * 使用TreeSet(Comparator super E> comparator)构造器 91 * 需要实现Comparator接口,即实现compare方法 92 * */ 93 Comparator comparator = new CustomerComparator(); 94 TreeSet c5 = new TreeSet<>(comparator); 95 c5.add(new Customer(1,"AAA")); 96 c5.add(new Customer(3,"CCC")); 97 c5.add(new Customer(2,"BBB")); 98 c5.add(new Customer(4,"DDD")); 99 for(Customer cus:c5){ 100 System.out.println(cus); 101 } 102 } 103 }
4.2 Customer.java
1 import java.util.Objects; 2 3 public class Customer implements Comparable{ 4 5 private int customerId; 6 private String customerName; 7 8 public Customer(Integer customerId, String customerName) { 9 this.customerId = customerId; 10 this.customerName = customerName; 11 } 12 13 public int getCustomerId() { 14 return customerId; 15 } 16 public String getCustomerName() { 17 return customerName; 18 } 19 20 @Override 21 public String toString() { 22 return "Customer:[Id=" + customerId + ", Name=" + customerName + "]"; 23 } 24 25 /* 26 * 重写compareTo方法 27 * 按Id或者name排序 28 * 可以对整体添加负号决定升降序 29 * */ 30 @Override 31 public int compareTo(Customer o) { 32 // return this.customerId - o.customerId; 33 return this.customerName.compareTo(o.customerName); 34 } 35 36 /* 37 * 重写equals和hashcode方法 38 * 这里id和name相同则为同一对象 39 * */ 40 @Override 41 public boolean equals(Object o) { 42 if (this == o) return true; 43 if (!(o instanceof Customer)) return false; 44 Customer customer = (Customer) o; 45 return customerId == customer.customerId && 46 Objects.equals(customerName, customer.customerName); 47 } 48 49 @Override 50 public int hashCode() { 51 return Objects.hash(customerId, customerName); 52 } 53 54 }
4.3 CustomerComparator.java
1 import java.util.Comparator; 2 3 public class CustomerComparator implements Comparator{ 4 5 @Override 6 public int compare(Customer c1, Customer c2) { 7 // 按Id排序 8 return c1.getCustomerId() - c2.getCustomerId(); 9 } 10 }
!!!