java集合-Set集合

Posted zhou_shadow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java集合-Set集合相关的知识,希望对你有一定的参考价值。

  Set集合,类似于一个罐子,程序可以把多个对象"丢进"Set集合,而Set集合通常不能记住每个元素的添加顺序.Set集合与Collection基本相同,没有提供任何额外的方法.实际上Set就是Collection,只是行为有所不同(Set不允许有重复元素)

  Set集合不允许包含相同的元素,如果试图把两个相同的元素添加入同一个Set集合中,则添加操作失败,add()返回false,且新元素不会被加入.

  上面介绍Set的通用知识,因此完全适合后面介绍的HashSet,TreeSet和EnumSet三个实现类,只是这三个实现类各有特色.

一  HashSet

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

  HashSet具有以下特点:

    1.不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也有可能发生变化。

    2.HashSet不是同步的,如果多个线程同时访问一个HashSet。假设有两个或者以上的线程同时修改了HashSet集合时,则必须通过代码来保证其同步。

    3.集合元素可以是null.

  当使用HashSet集合来存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode()值,然后根据该hashCode值决定该对象在HashSet中的存储位置。如果有两个元素通过equals()方法比较返回true,但是它们的hashCode()方法返回值不相等,HashSet将会把它们存入不同的位置,依然可以添加成功。

  也就是说,HashSet集合判断两个元素相等的标准是两个对象通过equals()方法比较相等,并且两个对象的hashCode()方法返回值也相等。

示例代码:类A,B,C,分别重写了equals()方法,hashCode()方法这两个中的一个或者两个。

package com.j1803.collectionOfIterator;

import java.util.HashSet;
import java.util.Set;

//类A重写了equals()方法,总是返回true,但没有重写hashCode()方法.
class A{
    @Override
    public boolean equals(Object obj){
        return true;
    }
}

//类B重写了hashCode()方法,总是返回2,但没有重写equals()方法
class B{
    @Override
    public int hashCode(){
        return 2;
    }
}
//类C重写了equals()方法,总是返回true,重写了hashCode()方法,总是返回2
class C{
    @Override
    public boolean equals(Object obj){
        return true;
    }
    @Override
    public int hashCode(){
        return 2;
    }
}
public class HashSetTest {
    public static void main(String[] args) {
        Set book=new HashSet();
        HashSet books=new HashSet();
        A a=new A();
        B b=new B();
        C c=new C();
        books.add(a);
        books.add(a);
        books.add(b);
        books.add(b);
        books.add(c);
        books.add(c);
        System.out.println(books);

    }
}
[[email protected]2, [email protected]]

Process finished with exit code 0

 

以上是关于java集合-Set集合的主要内容,如果未能解决你的问题,请参考以下文章

Java集合框架--Set集合概述 & Set接口使用

java集合运算:求交集,并集,集合差

Java 基础 - 集合

java 集合框架之 Set

[Java基础]Set集合概述和特点

java使用Set集合去重