Set集合实现于 collection接口,Set集合与List集合最大的区别就是Set集合不包含重复元素,并且Set集合存放的元素通常不按照顺序存放。最多只包含一个null元素。

HashSet类

HashSet是Set接口的实现,HashSet线程不安全,在多线程的情况下最终取得的结果不确定,HashSet存放的元素没有顺序的。

构造方法:

  1. HashSet() ;构造一个新的空set,其底层实现HashMap,默认初始化容量为16.
  2. HashSet(Collection c);通过指定的Collection构造一个新set集合。
  3. HashSet(int initialCapacity) ;构造一个新的空set集合,设置指定的初始化容量。
  4. HashSet(int initialCapacity, float loadFactor) ;构造一个新的空set集合,设置指定的初始化容量和指定的加载因子。

常用方法:

方法名

说明

boolean add(E e)

如果此集合中未包含指定元素,则添加指定元素

void clear()

清空此Set的所有元素

boolean contains(Object o)

如果此set中包含指定元素,返回true,否则false

boolean isEmpty()

如果此set中不包含任何元素则返回true

boolean remove(Object o)

如果指定元素存在与set中,则将其移除

int size()

返回此set中的元素

示例:

public class dome2{
	public static void main(String[] args){
        HashSet<String> h=new HashSet<String>();
        h.add("c++教程");
        h.add("Java教程");
        h.add("python教程");
        h.add("html教程");
        
        System.out.println("java教程是否存放进去:"+h.add("Java教程"));
        System.out.println("此set集合的长度是:"+h.size());
        
        System.out.println("通过迭代器遍历hashset集合,发现顺序不一样");
        Iterator<String> it=h.iterator();
        
        while(it.hasNext()) {
        	System.out.println(it.next());
        }
       
   }
}

结果
java教程是否存放进去:false
此set集合的长度是:4
通过迭代器遍历hashset集合,发现顺序不一样
c++教程
Java教程
html教程
python教程

TreeSet 类

TreeSet 类实现了 Set 接口和 SortedSet 接口,并且可以实现对集合的自然排序,因此使用TreeSet实现Set接口一开始就是按照升序排列的。

构造方法:

  1. TreeSet() ;构造一个新的空的set,集合元素按照升序排列。
  2. TreeSet(Collection c);通过包含Collection接口创建 一个新的空set集合,按照升序进行排列。
  3. TreeSet(Comparator comparator) ;创建一个新的空set集合,按照指定的比较器进行排序。
  4. TreeSet(SortedSet s) ;构造一个与指定有序 set 具有相同映射关系和相同排序的新 TreeSet。

常用方法:

方法名

说明

boolean add(E e)

未包含指定元素则添加进去

E ceiling(E e)

返回此 set 中大于等于给定元素的最小元素;如果不存在这样的元素,则返回 null

boolean contains(Object o)

如过此set有指定元素就返回true

E first()

返回此set的第一个元素

E floor(E e)

返回此set中小于等于指定元素的最大元素

SortedSet headSet(E toElement)

返回此set集合中toElement之前的所有元素,不包含toElement

E last()

返回此set集合的最后一个元素

E pollFirst()

获取并移除第一个元素

E pollLast()

获取并移除最后一个元素

SortedSet subSet(E fromElement, E toElement)

返回此set集合的部分元素

SortedSet tailSet(E fromElement)

返回此set集合中fromElement之后的所有元素,不包含formElement

示例:

给定十名学生的成绩,成绩录入的顺序随意,查询成绩中是否有67分的人,查询不及格的成绩有哪些,及格的成绩有哪些?

public class dome2{
	public static void main(String[] args){
		TreeSet<Integer> tr=new TreeSet<Integer>();
       for(int i=0;i<10;i++) {
    	   tr.add((int)(Math.random()*100));
       }
       System.out.println("十名学生成绩由低到高排列");
      Iterator it=tr.iterator();
      while(it.hasNext()) {
    	  System.out.print(it.next()+"\t");
      }
      System.out.println("\n"+(tr.contains(67)?"":"没有")+"查询到67分的人存在");
      
      System.out.println("不及格的成绩有:");
      SortedSet<Integer> st1=tr.headSet(60);
      for(int i=0;i<st1.toArray().length;i++) {
    	  System.out.print(st1.toArray()[i]+"\t");
      }
      System.out.println("\n"+"及格的成绩有:");
      SortedSet<Integer> st2=tr.tailSet(60);
      for(int i=0;i<st2.toArray().length;i++) {
    	  System.out.print(st2.toArray()[i]+"\t");
      }
   }
}