代码改变世界

java HashSet的使用

2020-02-12 19:07  默默不语  阅读(3762)  评论(0编辑  收藏  举报

今天在写代码时想要使用HashSet,由于之前并不了解,就在网上查了一下原理及使用方法。

HashSet原理

  该类实现了Set接口,HashSet中不允许元素重复,不保证集合中元素的顺序,元素可为null,但最多只能一个。对于 HashSet 而言,HashSet继承自AbstractSet,它是基于 HashMap 实现的,HashSet 底层使用HashMap来保存所有元素。因此HashSet的实现比较简单,相关 HashSet 的操作,基本上都是直接调用底层 HashMap 的相关方法来完成。

常用方法

  构造方法:

    默认构造器:

public HashSet() {
    map = new HashMap<>();
}

    将传入的集合添加到HashSet的构造器

public HashSet(Collection< ? extends E> c) {
    map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
    addAll(c);
}

    明确初始容量和装载因子的构造器

public HashSet(int initialCapacity, float loadFactor) {
    map = new HashMap<>(initialCapacity, loadFactor)
}

    仅明确初始容量的构造器(装载因子默认0.75

public HashSet(int initialCapacity) {
    map = new HashMap<>(initialCapacity);
}

    API中几个常用方法:

    size() :返回值为int,返回此 set 中的元素的数量(set 的容量)。

    isEmpty():返回值为boolean, 如果此 set 不包含任何元素,则返回 true。

    add(E e):返回值为boolean,如果此 set 中尚未包含指定元素,则添加指定元素。

    iterator():返回值为Iterator<E>, 返回对此 set 中元素进行迭代的迭代器。

    remove(Object o):返回值为boolean,如果指定元素存在于此 set 中,则将其移除。

    contains(Object o):返回值为boolean,如果此 set 包含指定元素,则返回 true。

    clear():无返回值, 从此 set 中移除所有元素。

    clone():返回值为Object,返回此HashSet的浅表副本,而并没有复制元素本身。

 

HashSet的简单使用

创建:

package com.cmq.common;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.cmq.entity.Shoes;
import com.cmq.entity.Manager;

/**
*@author chenmeiqi
*@version 2020年2月10日 下午3:33:08
*@公共属性类
*/
public class Constants {

    //使用List模拟数据库,创建管理员List对象
    //public static List<Manager> mgrlist = new ArrayList<>();
    
    public static Set<Shoes> hashsetShoes= new HashSet<>();

}

添加

if (idyz(Integer.parseInt(s[0]))) {
            if (Util.isEmpty(s[1])) {
                if (s[6].equals("1") || s[6].equals("2") || s[6].equals("3") || s[6].equals("4")) {
                    shoe.setId(Integer.parseInt(s[0]));
                    shoe.setName(s[1]);
                    shoe.setSign(Integer.parseInt(s[6]));
                    shoe.setImage(s[2]);
                    shoe.setPrice(Double.parseDouble(s[3]));
                    shoe.setPub_address(s[4]);
                    shoe.setPub_date(Util.StringToDate(s[5]));
                    // 保存set集合中
                    Constants.hashsetShoes.add(book);
                } else {
                    System.out.println("*******类别输入有误!****");
                }
            } else {
                System.out.println("*******名称不能为空!*****");
            }
        }

删除:

for(Shoesshoes:Constants.hashsetShoes) {
            if(shoes.getId() == id_input) {//从hashsetShoes中查询出id为传入的id的用户
                Constants.hashsetBook.remove(shoes);//删除该商品
                break;
            }
            
        }