zoukankan      html  css  js  c++  java
  • Set接口

    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:  允许元素重复,  并且元素有序(存储和取出一致).

      

  • 相关阅读:
    Python在信号与系统(1)——Hilbert兑换,Hilbert在国家统计局的包络检测应用,FIR_LPF滤波器设计,格鲁吉亚也迫使高FM(PM)调制
    HDU 4925 Apple Tree
    [ACM] HDU 3395 Special Fish (最大重量二分图匹配,KM算法)
    OCP解决问题053-16 MEMORY_TARGET
    图像归一化
    我毕业10年
    静态分析与动态分析
    逐步求精
    抽象与逐步求精
    自项向下,逐步求精
  • 原文地址:https://www.cnblogs.com/zhai113/p/11632689.html
Copyright © 2011-2022 走看看