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

Java 学习总结(十六)

程序员文章站 2022-06-09 21:13:27
...

Java 基础总结(十六)

Set集合:

一、HashSet类
HashSet类是Set接口的典型实现类。大多数情况下使用Set集合时候就是使用这个实现类。 HashSet类是按Hash算法来存储集合中的元素的,因此具有很好的存取和查找性能。

HashSet类的特点:
1、 无序,不能保证元素的排列顺序,顺序可能与添加顺序不同,也有可能会发生变化。
2、 非线程安全(不同步),HashSet不是同步的(不是线程安全的),如果多个线程同时访问一个HashSet,假设有两个或者两个以上线程同时修改了 HashSet集合时,则必须通过代码来保证其同步。
3、 HashSet实现的集合元素值可以是null,但只能放入一个null。
向 HashSet集合中存入一个元素时, HashSet会调用该对象的hashCode()方法来获取该对象的哈希值,然后根据它的哈希值决定该对象在HashSet中的存储位置。如果有两个元素通过 equals方法比较返回true,但它们的hashCode()方法返回值不相等,则 HashSet将会把它们存储在不同的位置,依然可以添加成功。

示例代码:

package com.zst.collectiondemo.setdemo;

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

/**
 * set无序 不允许重复元素
 * HashSet 可以放入null,但只能放入一个null
 * @author ZST
 * 
 */

public class
HashSetDemo {
    public static void main(String[] args) {
        // HashSet根据哈希值排序,是无序的,
        HashSet<String> set = new HashSet<>();

        // 哈希值
        // System.out.println("B".hashCode());

        // 添加元素
        // 只能添加一个元素,不允许重复,多的会返回false,不会再放进去
        set.add("B");
        set.add("A");
        set.add("D");
        set.add("C");
        set.add("A");
        set.add("F");
        set.add("G");
        set.add("I");
        set.add("1");
        System.out.println(set.add("I"));//返回false
        set.add("I");
        set.add("I");
        set.add(null);// 可以放入null,但只能放入一个null
        System.out.println(set);

        // 移除
        set.remove("I");
        System.out.println(set);

        List<String> list = new ArrayList<>();
        list.add("X");
        list.add("Z");
        // 添加多个和移除多个
        set.addAll(list);//添加多个
        System.out.println(set);
        set.removeAll(list);//移除多个
        System.out.println(set);

 

        // 输出set
        System.out.println(set.toString());

        // 遍历
        System.out.println("foreach遍历:");
        for (String string : set) {
            System.out.print(string + "   ");
        }

        // 迭代器遍历
        System.out.println("\nIterator 迭代器 while:");
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()) {
            System.out.print(iterator.next() + "   ");
        }

        System.out.println("\nIterator 迭代器 for:");
       for (Iterator<String> iterator2 = set.iterator(); iterator2.hasNext();) {

            String string = (String) iterator2.next();

            System.out.print(string + "   ");

        }

        // 获取元素个数
        System.out.println("HashSet的元素的个数:" + set.size());

        // HashSet中是否包含某个元素
        System.out.println("HashSet中是否包含某个元素:" + set.contains("F"));

        System.out.println("HashSet中是否包含某个列表的元素:" + set.containsAll(list));

        // 清空set
        set.clear();
        System.out.println("set是否为空:" + set.isEmpty());
    }
}