134 votes

Comment créer un HashMap avec deux clés (paire de clés, valeur) ?

J'ai un tableau d'entiers en 2D. Je veux qu'ils soient placés dans un HashMap. Mais je veux accéder aux éléments du HashMap en fonction de l'index du tableau. Quelque chose comme :

Pour A[2][5], map.get(2,5) qui renvoie une valeur associée à cette clé. Mais comment créer un hashMap avec une paire de clés ? Ou, en général, plusieurs clés : Map<((key1, key2,..,keyN), Value) de manière à ce que je puisse accéder à l'élément en utilisant get(key1,key2,...keyN).

EDIT : 3 ans après avoir posté la question, je veux y ajouter un peu plus de choses

Je suis tombé sur un autre moyen pour NxN matrix .

Indices de tableau, i y j peut être représenté comme un seul key de la manière suivante :

int key = i * N + j;
//map.put(key, a[i][j]); // queue.add(key); 

Et les indices peuvent être retraités à partir de l'indice key de cette façon :

int i = key / N;
int j = key % N;

1voto

slisnychyi Points 1086

Vous pouvez également utiliser goyave Table pour cela.

La table représente une carte spéciale où deux clés peuvent être spécifiées de manière combinée pour faire référence à une seule valeur. Cela revient à créer une carte de cartes.

//create a table
  Table<String, String, String> employeeTable = HashBasedTable.create();

  //initialize the table with employee details
  employeeTable.put("IBM", "101","Mahesh");
  employeeTable.put("IBM", "102","Ramesh");
  employeeTable.put("IBM", "103","Suresh");

  employeeTable.put("Microsoft", "111","Sohan");
  employeeTable.put("Microsoft", "112","Mohan");
  employeeTable.put("Microsoft", "113","Rohan");

  employeeTable.put("TCS", "121","Ram");
  employeeTable.put("TCS", "122","Shyam");
  employeeTable.put("TCS", "123","Sunil");

  //get Map corresponding to IBM
  Map<String,String> ibmEmployees =  employeeTable.row("IBM");

1voto

Vikas Pal Points 11

Nous pouvons créer une classe pour passer plus d'une clé ou valeur et l'objet de cette classe peut être utilisé comme paramètre dans map.

import java.io.BufferedReader; 
import java.io.FileReader;
import java.io.IOException;
import java.util.*;

 public class key1 {
    String b;
    String a;
    key1(String a,String b)
    {
        this.a=a;
        this.b=b;
    }
  }

public class read2 {

private static final String FILENAME = "E:/studies/JAVA/ReadFile_Project/nn.txt";

public static void main(String[] args) {

    BufferedReader br = null;
    FileReader fr = null;
    Map<key1,String> map=new HashMap<key1,String>();
    try {

        fr = new FileReader(FILENAME);
        br = new BufferedReader(fr);

        String sCurrentLine;

        br = new BufferedReader(new FileReader(FILENAME));

        while ((sCurrentLine = br.readLine()) != null) {
            String[] s1 = sCurrentLine.split(",");
            key1 k1 = new key1(s1[0],s1[2]);
            map.put(k1,s1[2]);
        }
        for(Map.Entry<key1,String> m:map.entrySet()){  
            key1 key = m.getKey();
            String s3 = m.getValue();
               System.out.println(key.a+","+key.b+" : "+s3);  
              }  
  //            }   
        } catch (IOException e) {

        e.printStackTrace();

    } finally {

        try {

            if (br != null)
                br.close();

            if (fr != null)
                fr.close();

        } catch (IOException ex) {

            ex.printStackTrace();

        }

    }

    }

 }

0voto

VISHAL SINGH Points 36

Vous pouvez le télécharger à partir du lien ci-dessous : https://github.com/VVS279/DoubleKeyHashMap/blob/master/src/com/virtualMark/doubleKeyHashMap/DoubleKeyHashMap.java

https://github.com/VVS279/DoubleKeyHashMap

Vous pouvez utiliser une double clé : valeur hashmap,

   DoubleKeyHashMap<Integer, Integer, String> doubleKeyHashMap1 = new 
   DoubleKeyHashMap<Integer, Integer, String>();

   DoubleKeyHashMap<String, String, String> doubleKeyHashMap2 = new 
   DoubleKeyHashMap<String, String, String>();

0voto

Inanc Cakil Points 94

L'utilisation de org.apache.commons.lang3.tuple.Pair est très simple ;

   Map<String, Pair<String, Integer>> map= new HashMap<>(); 
   map.put("key", Pair.of("a", 1)); 
   int value = map.get("key").getRight();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X