adding a key to HashMap without the value?

前端 未结 5 2235
孤城傲影
孤城傲影 2021-02-19 14:37

Is there a way to add a key to a HashMap without also adding a value? I know it seems strange, but I have a HashMap> amd I wan

相关标签:
5条回答
  • 2021-02-19 14:49

    Since you're using a Map<String, List<Object>>, you're really looking for a multimap. I highly recommend using a third-party library such as Google Guava for this - see Guava's Multimaps.

    Multimap<String, Object> myMultimap = ArrayListMultimap.create();
    
    // fill it
    myMultimap.put("hello", "hola");
    myMultimap.put("hello", "buongiorno");
    myMultimap.put("hello", "สวัสดี");
    
    // retrieve
    List<String> greetings = myMultimap.get("hello");
                          // ["hola", "buongiorno", "สวัสดี"]
    

    Java 8 update: I'm no longer convinced that every Map<K, SomeCollection<V>> should be rewritten as a multimap. These days it's quite easy to get what you need without Guava, thanks to Map#computeIfAbsent().

    Map<String, List<Object>> myMap = new HashMap<>();
    
    // fill it
    myMap.computeIfAbsent("hello", ignored -> new ArrayList<>())
      .addAll(Arrays.asList("hola", "buongiorno", "สวัสดี");
    
    // retrieve
    List<String> greetings = myMap.get("hello");
                          // ["hola", "buongiorno", "สวัสดี"]
    
    0 讨论(0)
  • 2021-02-19 14:52
    //This program should answer your questions
    import java.util.*;
    public class attemptAddingtoHashMap { //Start of program
    
    //MAIN METHOD #################################################
    
    public static void main(String args[]) {  //main begins
    
    Map<String, ArrayList<Object>> hmTrial = new HashMap<String, ArrayList<Object>>(); 
    
    ArrayList alTrial = new ArrayList();//No values now
    
    if (hmTrial.containsKey("first")) {
    hmTrial.put("first", alTrial); }
    
    else {hmTrial.put("first",alTrial);}
    //in either case, alTrial, an ArrayList was mapped to the string "first"
    //if you choose to, you can also add objects to alTrial later
    System.out.println("hmTrial is " + hmTrial); //empty now
    alTrial.add("h");
    alTrial.add("e");
    alTrial.add("l");
    alTrial.add("l");
    alTrial.add("o");
    System.out.println("hmTrial is " + hmTrial);//populated now
    
       } //end of main
    //#############################################################################################################
    
    } //end of class
    
    //Note - removing objects from alTrial will remove the from the hashmap
    //You can copy, paste and run this code on https://ide.geeksforgeeks.org/
    
    0 讨论(0)
  • 2021-02-19 14:53

    You can put null values. It is allowed by HashMap

    You can also use a Set initially, and check it for the key, and then fill the map.

    0 讨论(0)
  • 2021-02-19 15:02

    I'm not sure you want to do this. You can store null as a value for a key, but if you do how will be able to tell, when you do a .get("key") whether the key exists or if it does exist but with a null value? Anyway, see the docs.

    0 讨论(0)
  • 2021-02-19 15:10

    Yes, it was confusing enough ;) I don't get why you want to store keys without values instead just putting empty arraylists instead of null.

    Adding null may be a problem, because if you call

    map.get("somekey");
    

    and receive a null, then you do not know, if the key is not found or if it is present but maps to null...

    0 讨论(0)
提交回复
热议问题