算法训练——day13哈希Map、Set、Bucket
HashMap
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
HashMap 是无序的,即不会记录插入的顺序。
HashMap<Integer, String> ret= new HashMap<Integer, String>();//定义哈希表//增
hashmap.put(1, "str1"); // 执行后为{1=str1}
hashmap.put(2, "str2"); // 执行后为{1=str1, 2=str2}//删
hashmap.remove(1); // 执行后hash表内为{2=str2}
hashmap.remove(2); // 执行后hash表内为{}//改:替换指定的key对应的 value
hashmap.replace(key,value);//查:根据key来访问value
hashmap.get(1); // 返回str1//清空
hashmap.clear();//计算键对的数量
hashmap.size();//当hashmap中有这个key时,就用对应的value,没有的话用默认值defaultValue;
hashmap.getOrDefault(key,defaultValue);//检查是否存在对应的映射关系
hashmap.containsKey(key); //key对应的映射关系
hashmap.containsValue(value); //value对应的映射关系
hashmap.isEmpty(); //是否为空hashmap.values(); // 返回所有Value值组成的集合
//现有HashMap: {1=str1, 2=str2}
//则返回Values: [str1, str2]// foreach循环for (Map.Entry<Integer, Integer> entry : map.entrySet()) {System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());}
HashSet
HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
HashSet 允许有 null 值。
HashSet 是无序的,即不会记录插入的顺序。
HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。
Set<Integer> hashset= new HashSet<Integer>();//定义
hashset.add(1);//增
hashset.remove(1);//删//使用 contains() 方法来判断元素是否存在于集合当中:
hashset.contains();//大小
hashset.size();
// 清空
hashmap.clear();//迭代HashSet<String> hashset= new HashSet<String>();hashset.add("str1");hashset.add("str2");hashset.add("str3");hashset.add("str2"); // 重复的元素不会被添加for (String i : hashset) {System.out.println(i);
/*输出:
str1
str2
str3
*/