建立每個鍵有多個值的HashMap
在某些情況下,可能需要在HashMap 中儲存具有相同鍵的多個值。儘管 Java 的 HashMap 本身並不支援此功能,但有幾種替代方法可以實現此功能。
1.以列表作為值的對應
一個選項是建立一個 HashMap,其中值是清單。這允許多個值與單一鍵關聯。例如:
Map<String, List<Person>> peopleByForename = new HashMap<>();
2。包裝類別
另一種方法是定義一個保存多個值的包裝類別。然後,這個包裝器可以用作 HashMap 中的值:
class Wrapper { private Person person1; private Person person2; public Wrapper(Person person1, Person person2) { this.person1 = person1; this.person2 = person2; } // Getter methods } Map<String, Wrapper> peopleByForename = new HashMap<>();
3。元組
如果您的程式語言支援元組,您可以將它們用作 HashMap 中的鍵或值。例如:
Map<String, Tuple2<Person, Person>> peopleByForename = new HashMap<>();
4。多個映射
最後,另一個策略是為每個值類型使用單獨的映射:
Map<String, Person> firstPersonByForename = new HashMap<>(); Map<String, Person> secondPersonByForename = new HashMap<>();
範例
考慮範例具有userId、clientID 和的HashMap的場景timeStamp:
選項1:以列表為值的對應
Map<Integer, List<Pair<String, Long>>> data = new HashMap<>(); data.put(1, Arrays.asList(new Pair<>("client-1", System.currentTimeMillis()))); data.put(1, Arrays.asList(new Pair<>("client-2", System.currentTimeMillis())));
選項2:包裝類別
class Data { private Integer userId; private String clientID; private Long timeStamp; public Data(Integer userId, String clientID, Long timeStamp) { this.userId = userId; this.clientID = clientID; this.timeStamp = timeStamp; } } Map<Integer, Data> data = new HashMap<>(); data.put(1, new Data(1, "client-1", System.currentTimeMillis())); data.put(1, new Data(1, "client-2", System.currentTimeMillis()));
以上是如何在 HashMap 中儲存具有相同鍵的多個值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!