JAVA -- Set 和 Map

Set

1.概述及特点

  • 一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2)的元素对 e1 和 e2,并且最多包含一个 null 元素
  • Set集合中的数据是无序的(因为Set集合没有下标)
  • Set不允许有重复数据,允许有null,但是最多一个
  • 由于其数据不可重复的特性,Set集合常用来给数据去重

2.HashSet

  • 此类(HashSet)实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。
  • HashSet底层是哈希表,包装了HashMap,相当于向HashSet中存入数据时,会把数据作为K存入内部的HashMap中,其中K不允许重复,允许使用null
  • HashSet 线程不安全

3.相关测试

	package cn.tedu.list;
	
	import java.util.Arrays;
	import java.util.HashSet;
	import java.util.Iterator;
	import java.util.Set;
	
	//本类用于测试Set接口
	public class TestSet {
   
	    public static void main(String[] args) {
   
	        //1.创建对象,Set父接口不可以直接创建对象
	        Set<String> set = new HashSet<>();
	        /**
	         * 总结:set集合中的元素都是无序的,
	         * set集合中的元素不可以重复
	         * set集合中可以存放null,但是也只允许存一个
	         */
	        //2.存入数据
	        set.add("牛气冲天");
	        set.add("虎虎生威");
	        set.add("虎虎生威");
	        set.add(null); //向集合中存入null值
	        set.add("null"); //向集合中存入字符串null
	        System.out.println(set); //[null, 虎虎生威, null, 牛气冲天]
	
	        /*set.clear(); //清空set集合
	        System.out.println(set);*/
	        System.out.println(set.contains("牛气冲天")); //true,判断集合中是否包含指定元素
	        System.out.println(set.equals("牛气冲天")); //false,判断集合是否与元素相等
	        System.out.println(set.hashCode()); //1961052313,打印set集合的哈希码值
	        System.out.println(set.isEmpty()); //false,判断集合是否为空
	        System.out.println(set.remove(null)); //true,移除集合中的指定元素
	        System.out.println(set);
	        System.out.println(set.size()); //3,打印集合中元素的个数
	        Object[] array = set.toArray(); //把集合转成数组
	        System.out.println(Arrays.toString(array)); //[虎虎生威, null, 牛气冲天]
	
	        //使用iterator迭代集合
	        Iterator<String> it = set.iterator();
	        while (it.hasNext()){
   
	            System.out.println(it.next());
	        }
	    }
	}

4.HashSet去重

  • 对于一般的基本类型的数据,可以直接去重
  • 如果是自定义对象,如下文的Student类对象,想要去重,必须重写hashCode()equals()方法
    • Student类
    package cn.tedu.list;
    
    import java
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值