HashMap/HashSet

HashMap也就是查字典

一个key对应一个value,更新value会覆盖原有值

一个value可以对应多个key

package collection;
  
import java.util.HashMap;
  
import charactor.Hero;
  
public class TestCollection {
    public static void main(String[] args) {
        HashMap<String,Hero> heroMap = new HashMap<String,Hero>();//采用泛型的方式
         
        heroMap.put("gareen", new Hero("gareen1"));
        System.out.println(heroMap);
         
        //key为gareen已经有value了,再以gareen作为key放入数据,会导致原英雄,被覆盖
        //不会增加新的元素到Map中
        heroMap.put("gareen", new Hero("gareen2"));
        System.out.println(heroMap);
         
        //清空map
        heroMap.clear();
        Hero gareen = new Hero("gareen");
         
        //同一个对象可以作为值插入到map中,只要对应的key不一样
        heroMap.put("hero1", gareen);
        heroMap.put("hero2", gareen);
         
        System.out.println(heroMap);
         
    }
}

————————————————————————————————————————————————————————

HashSet

1-只能添加不同的数据

2-没有顺序,

3-遍历因为没有get(),只能用迭代器或者增强型for循环

package collection;
  
import java.util.HashSet;
import java.util.Iterator;
  
public class TestCollection {
    public static void main(String[] args) {
        HashSet<Integer> numbers = new HashSet<Integer>();
         
        for (int i = 0; i < 20; i++) {
            numbers.add(i);
        }

         
        //Set不提供get方法来获取指定位置的元素
        //numbers.get(0)
         
        //遍历Set可以采用迭代器iterator
        for (Iterator<Integer> iterator = numbers.iterator(); iterator.hasNext();) {
            Integer i = (Integer) iterator.next();
            System.out.println(i);
        }
         
        //或者采用增强型for循环
        for (Integer i : numbers) {
            System.out.println(i);
        }
         
    }
}

关系 :

可以发现HashSet自身并没有独立的实现,而是在里面封装了一个Map.
HashSet是作为Map的key而存在的
而value是一个命名为PRESENT的static的Object对象,因为是一个类属性,所以只会有一个。

//寻找字符串数组里的重复字符串

public class HashSetFindSame {
    public static void main(String[] args) {
        String[] str=new String[100];
        HashSet<String> hs=new HashSet<>();
        ArrayList<String> result = new ArrayList<>();
        for(int i=0;i<str.length;i++) {
            str[i]=new CreateRandomString2().create();
            //把str的每个元素添加到hs中,因为hs集合对于前后2个相同的元素,只添加1个,所以这个hs集合的元素是唯一的
            Boolean b=hs.add(str[i]);
            //利用上面的HashSet的add方法返回特性:如果这个元素在hs集合存在的,那么调用add就会返回false,
            //就把这个值添加到另外的ArrayList去,这样的ArrayList就是一个重复set元素的集合
            if(!b) {
                result.add(str[i]);
            }
        };

猜你喜欢

转载自blog.csdn.net/Whiteleaf3er/article/details/82729336