欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java类HashSet常用API详解

程序员文章站 2022-05-18 17:43:09
HashSet - 测试类package HashSet_UtilityClass;import java.util.*;/** * HashSet测试类 */public class HashSetTest { public static void main(String[] args) { // 向集合中添加一个元素,若以存在该元素则不予添加 HashSet stuSet = new HashSet

HashSet - 测试类

package HashSet_UtilityClass;

import HashSet_UtilityClass.domain.Human;

import java.util.*;

/**
 * HashSet测试类
 */
public class HashSetTest {

    public static void main(String[] args) {

        // 向集合中添加一个元素,若以存在该元素则不予添加
        HashSet<String> stuSet = new HashSet<String>(Arrays.asList(new String[]{"李凡一", "邢晗铭", "刘佳琪", "骆蕾", "田颖", "由博文"}));
        System.out.println("原集合中的元素:");
        ForEachElementTraversal(stuSet);
        System.out.println("\n向原集合中添加新元素:" + stuSet.add("陈小同"));
        System.out.println("向原集合中添加重复元素:" + stuSet.add("邢晗铭"));
        System.out.println("\n添加新元素后的集合元素:");
        ForEachElementTraversal(stuSet);

        System.out.println("------------------------------------------------------------");

        // 清空此集合中的所有元素
        stuSet.clear();
        System.out.print("清空此集合中的所有元素:");
        if (stuSet.size() != 0) {
            ForEachElementTraversal(stuSet);
        } else {
            System.out.println("\n提示:此集合中无任何元素!");
        }

        System.out.println("------------------------------------------------------------");

        // 返回当前集合实例的浅表副本(浅克隆)
        HashSet<Integer> eleSet = new HashSet<Integer>();
        System.out.println("父集合中的元素:");
        RandomSetElement(eleSet);
        System.out.println("克隆子集合中的元素:");
        Object clone = eleSet.clone();
        System.out.println(clone.toString());

        // 返回当前集合实例的浅表副本(深克隆)
        System.out.println("\n浅克隆父级元素与子级元素会发生联动修改:");
        ExplainHashSetAPI.ShallowClone(); // 不在本类中的方法可以使用类名进行调用
        System.out.println("\n深克隆父级元素与子级元素不会发生联动修改,对象独立:");
        ExplainHashSetAPI.DeepClone();

        System.out.println("------------------------------------------------------------");

        // 判断当前集合中是否包含某个元素
        HashSet<String> singerSet = new HashSet<String>(Arrays.asList(new String[]{"李荣浩", "邢晗铭", "熙二"}));
        System.out.print("集合元素:");
        ForEachElementTraversal(singerSet);
        System.out.println("当前集合中是否包含元素“熙er”(true - 包含;false - 不包含):" + singerSet.contains("熙er"));

        System.out.println("------------------------------------------------------------");

        // 判断当前集合是否为空
        System.out.print("集合元素:");
        ForEachElementTraversal(singerSet);
        System.out.println("当前集合是否为空(true - 空;false - 非空):" + singerSet.isEmpty());

        System.out.println("------------------------------------------------------------");

        // 创建迭代器对当前集合中的元素进行迭代
        HashSet<Integer> numSet = new HashSet<Integer>(Arrays.asList(new Integer[]{10, 20, 30, 40, 50}));
        Iterator<Integer> iterator = numSet.iterator();
        System.out.println("创建迭代器对当前集合中的元素进行迭代:");
        while (iterator.hasNext()) {
            System.out.print(iterator.next() + "    ");
        }

        System.out.println("\n------------------------------------------------------------");

        // 判断集合中是否存在某元素,若存在则移除该元素
        System.out.print("当前集合元素:");
        WhileElementTraversal(numSet);
        System.out.println("\n当前集合中是否存在元素 60,若存在则删除:" + numSet.remove(60));
        System.out.println("当前集合中是否存在元素 10,若存在则删除:" + numSet.remove(10));
        System.out.print("\n删除元素后的集合元素:");
        WhileElementTraversal(numSet);

        System.out.println("------------------------------------------------------------");

        // 返回此集合的元素数量(长度)
        System.out.println("stuSet集合的元素数量为:" + stuSet.size());
        System.out.println("eleSet集合的元素数量为:" + eleSet.size());
        System.out.println("singerSet集合的元素数量为:" + singerSet.size());
        System.out.println("numSet集合的元素数量为:" + numSet.size());

    }

    /**
     * 随机集合元素
     *
     * @param targetSet
     */
    private static void RandomSetElement(HashSet<Integer> targetSet) {
        Random rd = new Random();
        for (int i = 0; i < 10; i++) {
            targetSet.add(rd.nextInt(100) + 1);
        }
        WhileElementTraversal(targetSet);
    }

    /**
     * while遍历集合元素
     *
     * @param targetSet
     */
    private static void WhileElementTraversal(HashSet<Integer> targetSet) {
        Object[] objects = targetSet.toArray();
        for (Object obj : objects) {
            System.out.print(obj + "    ");
        }
        System.out.println();
    }

    /**
     * foreach遍历集合元素
     *
     * @param targetSet
     */
    private static void ForEachElementTraversal(HashSet<String> targetSet) {
        Iterator<String> iterator = targetSet.iterator();
        for (Iterator<String> items = iterator; items.hasNext(); ) {
            System.out.print(items.next() + "    ");
        }
        System.out.println();
    }

}

HashSet - 测试类方法封装

package HashSet_UtilityClass;

import ArrayList_UtilityClass.domain.Singer;
import HashSet_UtilityClass.domain.Human;

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

/**
 * HashSet克隆方法封装
 */
public class ExplainHashSetAPI {

    /**
     * 集合元素浅克隆
     */
    public static void ShallowClone() {
        ArrayList<Human> orgList = new ArrayList<Human>();
        orgList.add(new Human("邢晗铭", '女', 19));
        orgList.add(new Human("李凡一", '女', 19));

        Collection<Human> deepClone = new HashSet<Human>(orgList);
        System.out.println("原集合中的Human对象:" + orgList.toString());
        System.out.println("克隆原集合中的对象:" + deepClone.toString());

        Iterator<Human> orgItor = orgList.iterator();
        while (orgItor.hasNext()) {
            orgItor.next().setName("李荣浩战队学员"); // 浅克隆会发生联动修改
        }

        System.out.println("原集合中的Human对象:" + orgList.toString());
        System.out.println("克隆原集合中的对象:" + deepClone.toString());
    } // ShallowClone方法结束

    /**
     * 集合元素深克隆
     */
    public static void DeepClone() {
        ArrayList<Human> orgList = new ArrayList<Human>();
        orgList.add(new Human("邢晗铭", '女', 19));
        orgList.add(new Human("李凡一", '女', 19));

        Collection<Human> deepClone = new HashSet<Human>(orgList.size());

        Iterator<Human> orgItor01 = orgList.iterator();
        while (orgItor01.hasNext()) {
            deepClone.add(orgItor01.next().clone()); // 调用Human类中重载的clone();
        }

        System.out.println("原集合中的Human对象:" + orgList.toString());
        System.out.println("克隆原集合中的对象:" + deepClone.toString());

        Iterator<Human> orgItor02 = orgList.iterator();
        while (orgItor02.hasNext()) {
            orgItor02.next().setName("李荣浩战队学员"); // 深克隆不会发生联动修改
        }

        System.out.println("原集合中的Human对象:" + orgList.toString());
        System.out.println("克隆原集合中的对象:" + deepClone.toString());
    } // DeepClone方法结束

}

HashSet - 方法封装所需的实体类

package HashSet_UtilityClass.domain;

/**
 * Human实体类
 */
public class Human implements Cloneable {

    private String name;
    private char gender;
    private int age;

    public Human() {
    }

    public Human(String name, char gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Human{" +
                "name='" + name + '\'' +
                ", gender=" + gender +
                ", age=" + age +
                '}';
    }

    /**
     * 定义clone();重载
     * @return
     */
    @Override
    public Human clone() {
        try {
            Human result = (Human) super.clone();
            return result;
        } catch (CloneNotSupportedException e) {
            throw new RuntimeException(e);
        }
    }

}

运行示范

原集合中的元素:
刘佳琪    李凡一    邢晗铭    田颖    骆蕾    由博文    

向原集合中添加新元素:true
向原集合中添加重复元素:false

添加新元素后的集合元素:
刘佳琪    李凡一    邢晗铭    田颖    陈小同    骆蕾    由博文    
------------------------------------------------------------
清空此集合中的所有元素:
提示:此集合中无任何元素!
------------------------------------------------------------
父集合中的元素:
96    65    34    35    19    37    55    75    44    
克隆子集合中的元素:
[96, 65, 34, 35, 19, 37, 55, 75, 44]

浅克隆父级元素与子级元素会发生联动修改:
原集合中的Human对象:[Human{name='邢晗铭', gender=女, age=19}, Human{name='李凡一', gender=女, age=19}]
克隆原集合中的对象:[Human{name='李凡一', gender=女, age=19}, Human{name='邢晗铭', gender=女, age=19}]
原集合中的Human对象:[Human{name='李荣浩战队学员', gender=女, age=19}, Human{name='李荣浩战队学员', gender=女, age=19}]
克隆原集合中的对象:[Human{name='李荣浩战队学员', gender=女, age=19}, Human{name='李荣浩战队学员', gender=女, age=19}]

深克隆父级元素与子级元素不会发生联动修改,对象独立:
原集合中的Human对象:[Human{name='邢晗铭', gender=女, age=19}, Human{name='李凡一', gender=女, age=19}]
克隆原集合中的对象:[Human{name='邢晗铭', gender=女, age=19}, Human{name='李凡一', gender=女, age=19}]
原集合中的Human对象:[Human{name='李荣浩战队学员', gender=女, age=19}, Human{name='李荣浩战队学员', gender=女, age=19}]
克隆原集合中的对象:[Human{name='邢晗铭', gender=女, age=19}, Human{name='李凡一', gender=女, age=19}]
------------------------------------------------------------
集合元素:李荣浩    邢晗铭    熙二    
当前集合中是否包含元素“熙er”(true - 包含;false - 不包含):false
------------------------------------------------------------
集合元素:李荣浩    邢晗铭    熙二    
当前集合是否为空(true - 空;false - 非空):false
------------------------------------------------------------
创建迭代器对当前集合中的元素进行迭代:
50    20    40    10    30    
------------------------------------------------------------
当前集合元素:50    20    40    10    30    

当前集合中是否存在元素 60,若存在则删除:false
当前集合中是否存在元素 10,若存在则删除:true

删除元素后的集合元素:50    20    40    30    
------------------------------------------------------------
stuSet集合的元素数量为:0
eleSet集合的元素数量为:9
singerSet集合的元素数量为:3
numSet集合的元素数量为:4

本文地址:https://blog.csdn.net/qq_44965393/article/details/107593238