Set

  定义

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

  特点:  

    Set接口是无序的

    Set 是继承于Collection的接口。它是一个不允许有重复元素的集合。

    Set可以存储null值,但是null不能重复

    Set的实现类都是基于Map来实现的(HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的)。

  例:

 1 public class Demo02 {
 2     public static void main(String[] args) {
 3         Set<String> set=new HashSet<String>();
 4         set.add("hello");
 5         set.add("java");
 6         set.add("hello");
 7         for(String s:set){
 8             System.out.println(s);
 9         }
10     }
11 }

  如图所示:

    

 

 

HashSet

  是实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。

  特点

    底层数据结构是 哈希表,HashSet的本质是一个"没有重复元素"的集合,它是通过HashMap实现的。HashSet中含有一个"HashMap类型的成员变量"map,在HashSet中操作函数,实际上都是通过map实现的。

    哈希表保证唯一  依赖hashcode和equals方法

    存储到集合中是无序的

  例:

 1 //用Set对象调用add方法
 2 public class Demo03 {
 3     public static void main(String[] args) {
 4         int str="abc".hashCode();
 5         int p=new Person("小黄",18).hashCode();
 6         System.out.println(p);
 7         Set<Person> s=new HashSet<Person>();//重写equals和hashCode方法
 8         s.add(new Person("小黑",18));
 9         s.add(new Person("小黑",18));
10         s.add(new Person("lao黑",19));
11         for(Person a:s){
12             System.out.println(a);//没有重复元素
13         }
14     }
15 }

 

  如图所示:

    

 

 

LinkeHashSet

  底层数据结构是 链表和哈希表

  链表保证元素有序

  哈希表保证元素唯一

  例:

 1 public class Demo04 {
 2     public static void main(String[] args) {
 3         LinkedHashSet<String> set=
 4                 new LinkedHashSet<String>();
 5 
 6         set.add("hello");
 7         set.add("java");
 8         set.add("hello");
 9         set.add("java");
10         //遍历
11         for(String s:set){
12             System.out.println(s);
13         }
14     }
15 }

  如图所示:

    

 

 

Set集合和List集合的区别?

        Set: 不允许元素重复, 集合元素唯一(元素可以为null), 不能保证迭代顺序恒久不变, 无序(存储和取出不一致).

        List:  允许元素重复,  并且元素有序(存储和取出一致).

 

 

  

posted on 2019-10-17 16:58  仰望星空77  阅读(225)  评论(0编辑  收藏  举报