2014-10-21 8 views
5

Chcę dodać do listy odnośników w ramach hashmap. ex Jan: -> jack -> czarny -> zgryzienia Susan: -> Sally, Sammy, głupie ectDodawanie do linkedList w HashMap <String, LinkedList>

Nie jestem pewien, jak to zrobić. Czy potrzebuję nowej linkedList dla każdej nazwy, a jeśli tak, to jak ją dynamicznie utworzyć. Oto przykładowy kod, który napisałem, by spróbować.

import java.util.*; 
import java.io.*; 
public class test { 
    public static void main(String args[]) throws FileNotFoundException{ 
     HashMap<String, LinkedList<String>> testMap = new HashMap<String, LinkedList<String>>(); 
     File testFile = new File("testFile.txt"); 
     Scanner enterFile = new Scanner(testFile); 
     String nextline = ""; 
     LinkedList<String> numberList = new LinkedList<String>(); 
     int x = 0; 
     while(enterFile.hasNextLine()){ 
      nextline = enterFile.nextLine(); 
      testMap.put(nextline.substring(0,1),numberList); 
      for(int i = 1; i < nextline.length() - 1; i++){ 
       System.out.println(nextline); 
       testMap.put(nextline.substring(0,1),testMap.add(nextline.substring(i,i+1))); 
      } 
      x++; 
     } 
     LinkedList<String> printHashList = new LinkedList<String>(); 
     printHashList = testMap.get(1); 
     if(printHashList.peek() != "p"){ 
      System.out.println(printHashList.peek()); 
     } 
    } 
} 

srry jeśli nie jest to dobra wiadomość to moja pierwsza

+0

Jest to znacznie lepsze pierwszy post niż wiele widziałem, utrzymania dobrej pracy – Neilos

Odpowiedz

2
public void putToMap(String name) { 
    String firstLetter = name.substring(0, 1); 

    List<String> names = testMap.get(firstLetter); 
    if (names == null) { 
     names = new LinkedList<String>(); 
     testMap.put(firstLetter, names); 
    } 

    names.add(name); 
} 
+0

Prawy algorytmu, ale metoda powinna być statyczna, a powinien przekazać testMap jako parametr (w przypadku dostępu z głównej metody). – Chris

+2

Tak. Po prostu nie obchodzi mnie ... :) –

+0

Guava jest bardzo grubą biblioteką zawierającą tylko tę jedną funkcję. Używam tej metody. – etherous

1

Alexa odpowiedź jest często (i najbardziej lekki) rozwiązanie problemu, a jeden należy wybrać jako odpowiedź (jeśli modyfikuje ją zgodnie z moim komentarzem), ale chciałem tylko uświadomić ci, że innym rozwiązaniem jest użycie LinkedListMultiMap (która jest klasą w bibliotece Guava).

LinkedListMultiMap to prosty sposób na poradzenie sobie z mapami list (ale wiąże się z dodatkowym nakładem biblioteki biblioteki Guava). Możesz dodać wiele wartości osobno dla każdego klucza, co moim zdaniem jest pożądanym zachowaniem.

+0

Pamiętam, że Google Multimap był dość popularny. Nie jestem pewien, czy wciąż jestem w użyciu, ponieważ mam silną tendencję do wybierania prostych rozwiązań, chyba że koszt ich napisania nie uzasadnia ... –

+0

Po prostu oferowałem inne rozwiązanie w celach referencyjnych. Osobiście wybrałbym twoje rozwiązanie. – Chris