Set集合

Set集合类似于一个罐子,程序可以依次把多个对象“丢进”Set集合,而Set集合通 常不能记住元素的添加顺序。
Set集合不允许包含相同的元素,如果试图把两个相同的元素加入同一个Set集合 中,则添加操作失败,add()方法返回 false,且新元素不会被加入。

Set常用方法

在这里插入图片描述
HashSet类

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

HashSet类具有以下特点:
1、不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也有可能发生变化。
2、HashSet不是同步的(不是线程安全的),如果多个线程同时访问一个 HashSet,假设有两个或者两个以上线程同时修改了 HashSet集合时,则必须通 过代码来保证其同步。
3、集合元素值可以是null,但只能放入一个null。

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

HashSet判断元素是否相等的依据:对象的equals()比较返回false;且hashCode值不 相等,判断两个元素不相等;

示例:

package com.gx.collectiondemo;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
/**
 * set 无序 不允许重复元素 
 * HashSet 可以放入null,但只能放入一个null
 * @author sxj
 */
public class HashSetDemo {
	public static void main(String[] args) {
		HashSet <String> set = new HashSet<String>();
		// 添加元素		
		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);//[null, D, 1, F, G, A, B, C, I]
		// 移除
		set.remove("I");
		System.out.println(set);//[null, D, 1, F, G, A, B, C]

		List<String> list = new ArrayList<String>();
		list.add("X");
		list.add("Z");
		set.addAll(list);
		System.out.println(set);//[null, D, 1, F, G, A, B, C, X, Z]
		set.removeAll(list);
		System.out.println(set);//[null, D, 1, F, G, A, B, C]

		// 遍历
		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(set.containsAll(list));
		//清空set
		set.clear();
		System.out.println("set是否为空"+set.isEmpty());
	}
}

打印结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值