Интерфейс карты в Java - PullRequest
       8

Интерфейс карты в Java

3 голосов
/ 17 января 2012

Возвращает ли метод Map#get значение, которому сопоставлен ключ, или он возвращает ссылку на значение?Код (это программа, над которой я работаю):

    Map<String,Vector<String>> map=new TreeMap<String,Vector<String> >();  
    for(String line:services)
    {
         String[] set=line.split(" ");
         Vector<String> t=new Vector<String>();
         String BioService=set[0];             
         int i=1;              
         while(i<set.length)
         {  
              t.clear();                        
              if(map.containsKey(set[i]))
                  t=map.get(set[i]);                                                                                          
              t.addElement(BioService);               
              map.put(set[i],t);
              /*if i put t.clear() here i get null values in my output*/                                                                                                                                     
              i++;                
         }       
     }         

Ответы [ 2 ]

6 голосов
/ 17 января 2012

Возвращает ссылку на объект.

У вас никогда не будет фактического объекта в Java, только ссылка на него.

У вас есть настоящие примитивы (и вы не можете иметь ссылки на примитивы, только ссылки на объекты, которые обертывают примитивы или что-то в этом роде), но, конечно, примитивы не могут быть помещены в карты, только объекты могут.

Допустим, у вас есть следующий код:

Map<String,Vector<String>> map = new HashMap... // etc
Vector<String> vec = new Vector<String>();
vec.addElement("foo");
map.put("foo",vec);
vec.clear();
vec.addElement("bar");
map.put("bar",vec);

Vector<String> ret = map.get("foo");
System.out.println(ret.get(0)); // prints bar

Вы используете только один единственный вектор. Вы помещаете свой вектор в карту, а затем на следующей итерации очищаете его. Ну, вы только что очистили вектор внутри карты! То, что вы положили его на карту, не означает, что его нельзя изменить.

Я считаю, что вам лучше всего создать новый вектор для каждой записи.

Так замените

t.clear();

с

t = new Vector<String>();
2 голосов
/ 17 января 2012

Все не примитивные типы обрабатываются как ссылки в Java. Следовательно, метод get вернет ссылку на сопоставленный элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...