Java中的哈希映射方法和示例 | 第2部分(keySet(),values(),containsKey()…)

Java中的哈希映射方法和示例 | 第2部分(keySet(),values(),containsKey()…)

Java中的HashMap类方法和示例|第1部分(put(),get(),isEmpty()和size())

本文讨论更多方法。

keySet(): java.util.HashMap.keySet() 它返回此映射中包含的键的Set视图。该集合由映射支持,因此对映射的更改会反映在集合中,反之亦然。

语法:

public Set keySet()

返回值: 一个包含此映射中包含的键的Set视图

  • values(): java.util.HashMap.values() 它返回此映射中包含的值的Collection视图。该集合由映射支持,因此对映射的更改会反映在集合中,反之亦然。
    语法:
public Collection values()

返回值: 一个包含此映射中包含的值的Collection视图

containsKey(): java.util.HashMap.containsKey() 如果此映射将一个或多个键映射到指定值,则返回true。

语法:

public boolean containsValue(Object value)

参数:
value – 要在此映射中测试其存在的值
返回值: 如果此映射将一个或多个键映射到指定值,则返回true

实现:

// Java程序说明使用HashMap类方法
// keySet(),values(),containsKey()
import java.util.*;
public class NewClass
{
    public static void main(String args[])
    {
        // 1   创建HashMap
        HashMap<String, String> Geeks = new HashMap<>();
  
        // 2   将值添加到HashMap中("keys", "values")
        Geeks.put("Language", "Java");
        Geeks.put("Platform", "Geeks For geeks");
        Geeks.put("Code", "HashMap");
        Geeks.put("Learn", "More");
  
        // 3 containsKey()方法用于检查特定键的存在
        // 因为'Code'键在这里存在,所以条件为真
        if (Geeks.containsKey("Code"))
            System.out.println("Testing .containsKey : " +
                                           Geeks.get("Code"));
  
        // 4 keySet()方法返回HashMap中的所有键
        Set<String> Geekskeys = Geeks.keySet();
        System.out.println("Initial keys  : " + Geekskeys);
  
  
        // 5  values()方法返回HashMap中的所有值
        Collection<String> Geeksvalues = Geeks.values();
        System.out.println("Initial values : " + Geeksvalues);
  
        // 添加新的键值对
        Geeks.put("Search", "JavaArticle");
  
        // 再次使用.keySet()和.values()方法
        System.out.println("New Keys : " + Geekskeys);
        System.out.println("New Values: " + Geeksvalues);
    }
}

输出结果:

Testing .containsKey : HashMap
Initial keys  : [Language, Platform, Learn, Code]
Initial values : [Java, Geeks For geeks, More, HashMap]
New Keys : [Language, Platform, Search, Learn, Code]
New Values: [Java, Geeks For geeks, JavaArticle, More, HashMap]

.entrySet() : java.util.HashMap.entrySet() 方法返回HashMap中存在的所有键和值的完整集合。

语法:

public Set<Map.Entry> entrySet()

返回值:
键和值的完整集合

.getOrDefault : java.util.HashMap.getOrDefault() 该方法在HashMap中没有找到使用我们传递作为参数的键的值时,返回一个默认值。如果已经存在HashMap中的键的值,它不会对其进行任何操作。
这是一种很好的方式,可以为尚未映射的键分配值,而不会干扰已经存在的键和值的集合。

语法:

default V getOrDefault(Object key, V defaultValue)

参数:
key – 我们需要返回映射值的键
defaultValue – 在HashMap中出现的键的默认值
返回值:
将未映射的键与默认值进行映射。

.replace(): java.util.HashMap.replace(key, value)或java.util.HashMap.replace(key, oldvalue, newvalue)方法是java.util.HashMap类方法。

第一个方法接受键值对,用传递的新值替换键的现有值。如果没有这样的键值对,则replace()方法不会执行任何操作。

与此同时,第二个方法将只替换在HashMap中已找到键-旧值集。

语法:

replace(k key, v value)
          or
replace(k key, v oldvalue, newvalue)

参数:
key – 集合中具有旧值的键。
value – 我们想要与指定键配对的新值
oldvalue – 集合中具有指定键的旧值。
newvalue – 我们想要与指定键配对的新值。
返回值:
True – 如果被替换的值
Null – 如果没有这样的键值对

.putIfAbsent: java.util.HashMap.putIfAbsent(key, value)方法用于将新的键值对插入到HashMap中,如果相应的键值对存在,则返回Null值。

语法:

public V putIfAbsent(key, value)

参数:
key – 与传递的值关联的键。
value – 要与指定键关联的值。

// Java程序说明HashMap类方法()
// entrySet(), getOrDefault(), replace(), putIfAbsent
import java.util.*;
public class NewClass
{
    public static void main(String args[])
    {
        // HashMap的创建
        HashMap<String, String> Geeks = new HashMap<>();

        // 将值添加到HashMap中为("keys", "values")
        Geeks.put("Language", "Java");
        Geeks.put("Code", "HashMap");
        Geeks.put("Learn", "More");

        // .entrySet()返回Hashmap中存在的所有键及其值
        Set<Map.Entry<String, String>> mappingGeeks = Geeks.entrySet();
        System.out.println("Set of Keys and Values using entrySet() : "+mappingGeeks);
        System.out.println();

        // 使用.getOrDefault访问值
        // 在这里,它显示默认值,因为键“Code”已经存在
        System.out.println("Using .getorDefault : " 
                                    + Geeks.getOrDefault("Code","javaArticle"));

        // 这里它显示集合值,因为键“Search”不存在
        System.out.println("Using .getorDefault : "
                                    + Geeks.getOrDefault("Search","javaArticle"));
        System.out.println();

        // .replace()方法替换键“Learn”的值
        Geeks.replace("Learn", "Methods");
        System.out.println("working of .replace()     : "+mappingGeeks);
        System.out.println();

        /* .putIfAbsent()方法将新的键值对放置在HashMap中
            从而使其最初不存在 */
        Geeks.putIfAbsent("cool", "HashMap methods");
        System.out.println("working of .putIfAbsent() : "+mappingGeeks);

        /* .putIfAbsent()方法不会做任何操作
            因为键-值对已经存在 */
        Geeks.putIfAbsent("Code", "With_JAVA");
        System.out.println("working of .putIfAbsent() : "+mappingGeeks);

    }
}

输出:

使用entrySet()设置键和值 : [Language=Java, Learn=More, Code=HashMap]

使用.getorDefault : HashMap
使用.getorDefault : javaArticle

.replace()的工作原理     : [Language=Java, Learn=Methods, Code=HashMap]

.putIfAbsent()的工作原理 : [Language=Java, cool=HashMap methods, Learn=Methods, Code=HashMap]
.putIfAbsent()的工作原理 : [Language=Java, cool=HashMap methods, Learn=Methods, Code=HashMap]

删除(Object key): 如果存在此键的映射,则从此映射中删除此键。

// Java程序说明使用迭代器的remove()方法。
  
import java.util.*;
public class NewClass
{
    public static void main(String args[])
    {
        //  创建HashMap
        HashMap<String, String> Geeks = new HashMap<>();
  
        //  添加值到HashMap中作为("keys", "values")
        Geeks.put("Language", "Java");
        Geeks.put("Platform", "Geeks For geeks");
        Geeks.put("Code", "HashMap");
  
  
        //  .entrySet()返回哈希映射中所有键及其对应的值
        Set<Map.Entry<String, String>> mappingGeeks = Geeks.entrySet();
        System.out.println("键和值的集合 : "+mappingGeeks);
        System.out.println();
  
        //  创建迭代器
        System.out.println("使用迭代器删除集合");
        Iterator<Map.Entry<String, String>> geeks_iterator = Geeks.entrySet().iterator();
        while(geeks_iterator.hasNext())
        {
            Map.Entry<String, String> entry = geeks_iterator.next();
            //  使用迭代器一个一个删除集合
            geeks_iterator.remove(); // 从Map中正确地删除条目的方法,避免ConcurrentModificationException异常
            System.out.println("键和值的集合 : "+mappingGeeks);
  
        }
    }
}

输出:

键和值的集合 : [Language=Java, Platform=Geeks For geeks, Code=HashMap]

使用迭代器删除集合
键和值的集合 : [Platform=Geeks For geeks, Code=HashMap]
键和值的集合 : [Code=HashMap]
键和值的集合 : []

优点:

如果我们使用for循环,它内部会被转换为迭代器,但在迭代时,没有使用Itertor删除条目将会抛出ConcurrentModificationException异常。因此,我们使用显式迭代器和while循环来遍历。

参考:

https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程