Java学习——HashSet

HashSet

  • 参数类型:
    E - 由此集合维护的元素的类型

此类实现Set接口,由哈希表支持。 对集合的迭代次序不作任何保证; 特别是,它不能保证顺序在一段时间内保持不变。 这个类允许null元素,无重复元素。

构造方法

HashSet()
构造一个新的空集合; 背景HashMap实例具有默认初始容量(16)和负载因子(0.75)。
HashSet(Collection<? extends E> c)
构造一个包含指定集合中的元素的新集合。
HashSet(int initialCapacity)
构造一个新的空集合; 背景HashMap实例具有指定的初始容量和默认负载因子(0.75)。
HashSet(int initialCapacity, float loadFactor)
构造一个新的空集合; 背景HashMap实例具有指定的初始容量和指定的负载因子。

负载因子:当集合容量为16,负载因子为0.75时,集合中的元素个数为16×0.75=12时,将自动进行扩容。

 

import java.util.ArrayList;
import java.util.HashSet;

public class Main {
    public static void main(String[] args) {
        /*
        HashSet()
        构造一个新的空集合; 背景HashMap实例具有默认初始容量(16)和负载因子(0.75)。
         */
        HashSet <String> hashSet1 = new HashSet<>();

        /*
        HashSet(Collection<? extends E> c)
        构造一个包含指定集合中的元素的新集合。
         */
        ArrayList<String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        HashSet<String> hashSet2 = new HashSet<>(list);
        
        /*
        HashSet(int initialCapacity)
        构造一个新的空集合; 背景HashMap实例具有指定的初始容量和默认负载因子(0.75)。
         */
        HashSet<String> hashSet3 = new HashSet<>(20);

        /*
        HashSet(int initialCapacity, float loadFactor) 
        构造一个新的空集合; 背景HashMap实例具有指定的初始容量和指定的负载因子。 
         */
        HashSet<String> hashSet4 = new HashSet<String>(50, 0.75);
    }
}

主要方法

方法名说明
boolean add(E e)将指定的元素添加到此集合(如果尚未存在)。
void clear()从此集合中删除所有元素。
boolean contains(Object o)如果此集合包含指定的元素,则返回 true 。
boolean isEmpty()如果此集合不包含元素,则返回 true 。
Iterator iterator()返回此集合中元素的迭代器。
boolean remove(Object o)如果存在,则从该集合中删除指定的元素。
int size()返回此集合中的元素数
Object[] toArray()返回一个包含此集合中所有元素的数组。
T[] toArray(T[] a)返回一个包含此集合中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型。
add(E e)

boolean add(E e) 将指定的元素添加到此集合(如果尚未存在)
返回值为是否添加成功。
HashSet中不能存储重复元素,所以即使多次添加,也只会存在一次。
如果存储自定义类需要重写类的equals()方法和hashCode()方法,这样才能判断两个对象是否是重复对象。

import java.util.ArrayList;
import java.util.HashSet;

public class Main {
    public static void main(String[] args) {
        
        //构造一个新的空集合
        HashSet <String> hashSet = new HashSet<>();

        /*
        boolean add(E e) 将指定的元素添加到此集合(如果尚未存在)。
        HashSet中不能存储重复元素,所以即使多次添加,也只会存在一次。
         */
        boolean a1 = hashSet.add("张三");
        hashSet.add("李四");
        hashSet.add("王五");
        boolean a2 = hashSet.add("张三");
        System.out.println(a1 +" "+ a2);

    }
}

运行结果:
在这里插入图片描述

clear()

从此集合中删除所有元素,清空集合。

import java.util.ArrayList;
import java.util.HashSet;

public class Main {
    public static void main(String[] args) {
        /*
        构造一个新的空集合
         */
        HashSet <String> hashSet = new HashSet<>();
        //添加元素
        hashSet.add("张三");
        hashSet.add("李四");
        hashSet.add("王五");

        System.out.println(hashSet);

        //清空集合
        hashSet.clear();

        //输出清空之后的集合
        System.out.println(hashSet);

    }
}

运行结果:
在这里插入图片描述

boolean contains(Object o)

如果此集合包含指定的元素,则返回 true 。

import java.util.ArrayList;
import java.util.HashSet;

public class Main {
    public static void main(String[] args) {
        /*
        构造一个新的空集合
         */
        HashSet <String> hashSet = new HashSet<>();
        //添加元素
        hashSet.add("张三");
        hashSet.add("李四");
        hashSet.add("王五");

        System.out.println(hashSet.contains("赵四"));
        System.out.println(hashSet.contains("张三"));
    }
}

运行结果:
在这里插入图片描述

boolean isEmpty()

如果此集合不包含元素,则返回 true 。

import java.util.ArrayList;
import java.util.HashSet;

public class Main {
    public static void main(String[] args) {
        /*
        构造一个新的空集合
         */
        HashSet <String> hashSet = new HashSet<>();

        System.out.println(hashSet.isEmpty());
        //添加元素
        hashSet.add("张三");
        hashSet.add("李四");
        hashSet.add("王五");

        System.out.println(hashSet.isEmpty());

    }
}

Iterator iterator()

返回此集合中元素的迭代器。

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;

public class Main {
    public static void main(String[] args) {
        /*
        构造一个新的空集合
         */
        HashSet <String> hashSet = new HashSet<>();
        //添加元素
        hashSet.add("张三");
        hashSet.add("李四");
        hashSet.add("王五");

        Iterator it = hashSet.iterator();
        
        //遍历集合
        while(it.hasNext()) {
            System.out.println(it.next());
        }

    }
}


运行结果:
在这里插入图片描述

boolean remove(Object o)

如果存在,则从该集合中删除指定的元素。

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;

public class Main {
    public static void main(String[] args) {
        /*
        构造一个新的空集合
         */
        HashSet <String> hashSet = new HashSet<>();
        //添加元素
        hashSet.add("张三");
        hashSet.add("李四");
        hashSet.add("王五");

        //删除 “李四”
        hashSet.remove("李四");

        Iterator it = hashSet.iterator();

        //遍历集合
        while(it.hasNext()) {
            System.out.println(it.next());
        }

    }
}

运行结果:
在这里插入图片描述

int size()

返回此集合中的元素数

import java.util.ArrayList;
import java.util.HashSet;

public class Main {
    public static void main(String[] args) {
        /*
        构造一个新的空集合
         */
        HashSet <String> hashSet = new HashSet<>();
        //添加元素
        hashSet.add("张三");
        hashSet.add("李四");
        hashSet.add("王五");

        System.out.println(hashSet.size());

    }
}

运行结果:
在这里插入图片描述

toArray()

返回一个包含此集合中所有元素的数组

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;

public class Main {
    public static void main(String[] args) {
        /*
        构造一个新的空集合
         */
        HashSet <String> hashSet = new HashSet<>();
        //添加元素
        hashSet.add("张三");
        hashSet.add("李四");
        hashSet.add("王五");

        //将集合转换成数组
        String []str = hashSet.toArray(new String[0]);
        
        System.out.println("数组中的内容是:");
        for(String s : str) {
            System.out.println(s);
        }
    }
}

运行结果:
在这里插入图片描述

LinkedHashSet

底层为哈希表+链表,当元素大于8时,变为数组+红黑树,和HashSet不同的是LinkHashSet有序,双重链表中存储了将元素插入集合的顺序,此实现不同步。

构造方法

LinkedHashSet()
构造一个具有默认初始容量(16)和负载因子(0.75)的新的,空的链接散列集。
LinkedHashSet(Collection<? extends E> c)
构造与指定集合相同的元素的新的链接散列集。
LinkedHashSet(int initialCapacity)
构造一个具有指定初始容量和默认负载因子(0.75)的新的,空的链接散列集。
LinkedHashSet(int initialCapacity, float loadFactor)
构造具有指定的初始容量和负载因子的新的,空的链接散列集。

  • 19
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张宜强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值