java集合专题3:Set接口实现–java集合详解

一、Set接口概述

Set接口是Collection的子接口,set接口没有提供额外的方法

Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个 Set 集合中,则添加操作失败。

Set 判断两个对象是否相同不是使用 == 运算符,而是根据 equals 方法

二、Set实现类之一:HashSet()

HashSet 是 Set 接口的典型实现,大多数时候使用 Set 集合时都使用这个实现类。

HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取和查找性能。

HashSet 具有以下特点:

不能保证元素的排列顺序

HashSet 不是线程安全的

集合元素可以是 null

当向 HashSet 集合中存入一个元素时,HashSet 会调用该对象的 hashCode() 方法来得到该对象的 hashCode 值,然后根据 hashCode 值决定该对象在 HashSet 中的存储位置。

HashSet 集合判断两个元素相等的标准:两个对象通过 hashCode() 方法比较相等,并且两个对象的 equals() 方法返回值也相等。

 
  1. @Test
  2.     public void testHashSet(){
  3.         Set set = new HashSet();
  4.         for(int i = 0;i < 10;i++){
  5.             set.add("#"+ i + "#");
  6.         }
  7.         set.add("#" + 3 + "#");
  8.         set.add(null);
  9.         System.out.println(set.size());
  10.         System.out.println(set);
  11.         set.remove("#" + 3 + "#");
  12.         System.out.println(set);
  13.     }

三、Set实现类之二:LinkedHashSet()

LinkedHashSet 是 HashSet 的子类

LinkedHashSet 根据元素的 hashCode 值来决定元素的存储位置,但它同时使用链表维护元素的次序,这使得元素看起来是以插入顺序保存的。

LinkedHashSet插入性能略低于 HashSet,但在迭代访问 Set 里的全部元素时有很好的性能。

LinkedHashSet 不允许集合元素重复。

 
  1. @Test
  2.     public void testLinkedHashSet(){
  3.         Set set = new LinkedHashSet();
  4.         for(int i = 0;i < 10;i++){
  5.             set.add("#"+ i + "#");
  6.         }
  7.         set.add("#" + 3 + "#");
  8.         set.add(null);
  9.         Iterator iterator = set.iterator();
  10.         while(iterator.hasNext()){
  11.             System.out.println(iterator.next());
  12.         }
  13.     }

四、Set实现类之三:TreeSet()

TreeSet 是 SortedSet 接口的实现类,TreeSet 可以确保集合元素处于排序状态。

Comparator comparator()

Object first()

Object last()

Object lower(Object e)

Object higher(Object e)

SortedSet subSet(fromElement, toElement)

SortedSet headSet(toElement)

SortedSet tailSet(fromElement)

TreeSet 两种排序方法:自然排序和定制排序。默认情况下,TreeSet 采用自然排序。

 
  1. @Test  
  2. public void testTreeSrt(){  
  3.     Set set = new TreeSet();  
  4.     //当Person类没有实现Comparable接口时,当向TreeSet中  
  5.     set.add(new Person("DannyWu",22));  
  6.     set.add(new Person("Jack",25));  
  7.     set.add(new Person("DannyWu",47));  
  8.     set.add(new Person("Lucy",25));  
  9.     set.add(new Person("Jenny",34));  
  10.       
  11.     for(Object str : set){  
  12.         System.out.println(str);  
  13.     }  
weinxin
我的微信
有问题微信找我
DannyWu

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: