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]);
}
};