JAVA -- Set 和 Map

JAVA -- Set 和 Map

  • Set
    • 1.概述及特点
    • 2.HashSet
    • 3.相关测试
    • 4.HashSet去重
  • Map
    • 5.Map概述及特点
    • 6.常用方法测试
    • 7.HashMap
    • 8.底层实现
    • 9.总结

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.util.Objects;
    
    

你可能感兴趣的:(Java基础,java,hashmap,set)