HashSet 方法详解

一、HashSet是集合方法中Set的实现类:其主要特点为:

    1、不存在迭代性:存入该实现类对象中的元素是无序的

import java.util.HashSet;
public class HasSet {
	public static void main(String[] args) {
		HashSet<String> set =new HashSet<String>();
		set.add("Tom");
		set.add("Jim");
		set.add("jerry");
		for (String letters : set) {
			System.out.println(letters);
		}
	}
}

    执行结果:可以看出无序性

    2、帮助实现Hashmap实现类的遍历

    3、HashSet对象创建:

import java.util.HashSet;
public class HasSet {
	public static void main(String[] args) {
		HashSet<String> set =new HashSet<String>();
		}
	}
}

        一、引包

        二、确定泛型:不可以使用基本类型作为泛型:但是可以把基本类型包装



二、HashSet的常用方法:

    1、add()方法:将新元素添加到集合中

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

    从上面的HashSet构造方法中可以看到,当创建一个HashSet对象时,事实上就是新建了一个HashMap对象->map储存对象的全局变量

    解析:实现add()方法:

    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }

    add存储数据时,实则是将数据通过HashMap中的put(有关方法在HashMap中详细讲解)方法,可以看到其中PRESENT是一个常量,即将输出的数据通过return map.put(e, PRESENT)==null;的方式保存到HashSet创建的map集合中,进行存储;

    2、size() 方法:输出长度

import java.util.HashSet;
public class HasSet {
	public static void main(String[] args) {
		HashSet<String> set =new HashSet<String>();
		set.add("Tom");
		set.add("Jim");
		set.add("jerry");
		System.out.println(set.size());
	}
}

    很明显,长度为3;


    3、remove(Object  obj)   移除指定元素

    很明显,由于HashSet的无迭代性,所以一切有关索引的全部失效

import java.util.HashSet;
public class HasSet {
	public static void main(String[] args) {
		HashSet<String> set =new HashSet<String>();
		set.add("Tom");
		set.add("Jim");
		set.add("jerry");
		System.out.println(set.remove("Tom"));
	}
}

    输出结果为: true

    指定删除HashSet中的指定元素;返回值为:boolean型


    4、isEmpty() 检查是否为空字符

import java.util.HashSet;
public class HasSet {
	public static void main(String[] args) {
		HashSet<String> set =new HashSet<String>();
		set.add("Tom");
		set.add("Jim");
		set.add("jerry");
		System.out.println(set.isEmpty());
	}
}

        运行结果为:false  所以非空

    5、clear() 、 contains(Object o)  清空元素与是否包含:

import java.util.HashSet;
public class HasSet {
	public static void main(String[] args) {
		HashSet<String> set =new HashSet<String>();
		set.add("Tom");
		set.add("Jim");
		set.add("jerry");
		System.out.println(set.contains("Tom"));
		set.clear();
		System.out.println(set.isEmpty());
	}
}

    此时输出的为:为 true true 

    第一个true是因为包含Tom 第二个true是因为元素已经清空



三、HashSet的遍历

    1、由于HashSet的中元素的非迭代型,所以在使用遍历是不可以通过索引进行遍历

    2、foreach遍历

import java.util.HashSet;
public class HasSet {
	public static void main(String[] args) {
		HashSet<String> set =new HashSet<String>();
		set.add("Tom");
		set.add("Jim");
		set.add("jerry");
		set.contains("Tom");
		for (String letters : set) {
			System.out.println(letters);
		}
	}
}

    3、Iterator遍历

import java.util.HashSet;
import java.util.Iterator;
public class HasSet {
	public static void main(String[] args) {
		HashSet<String> set =new HashSet<String>();
		set.add("Tom");
		set.add("Jim");
		set.add("jerry");
		Iterator<String> iterator=set.iterator();
		while(iterator.hasNext()) {
			System.out.println(iterator.next());
		}
	}
}

四、总结

总体来讲,HashSet与ArrayList集合之间的相似度很高,搭建可以相互借鉴


版权声明:本文为weixin_45104211原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。