2013-08-10 3 views
0

Мне просто интересно, как проверить, содержит ли TreeMap> значение в Java? Для примера:Как проверить, содержит ли TreeMap <String, ArrayList <String>> значение? в Java

/*I have TreeMap<String,ArrayList<String>> map with these elements 
* {color = ["red","blue","green"], shape=["square", "circle"]} 
*/ 
System.out.println(map.containsValue("square")); //This return false 
System.out.println(map.values().contains("square")); //This return false also 

Я всегда получаю ложь, когда я использую containsValue() или содержит метод(). Кто-нибудь знает, почему и может дать мне предложения, пожалуйста?

Благодаря Ed

+2

The 'Карта # значения()' возвращает 'Collection >', а не 'ArrayList ' или так, как вы, казалось, ждать. Строка '' square "' никогда не может сравниться с любым 'ArrayList '. – BalusC

+1

Есть ли причина, по которой вы используете 'List', а не' Set'? У вас есть дубликаты? Я просто спрашиваю, потому что метод 'contains' в' List' равен 'O (n)', и тот же метод в 'Set' равен' O (1) '. –

+0

@ Borris the Spider: hmm..actually значения в списке будут уникальными, поэтому я думаю, что использование set лучше .. Thx для его восхождения .. будет ли он таким же образом, как и выше, хотя, чтобы увидеть, действительно ли эта карта содержит значение? Thx – zangetsKid

ответ

1

Вы тестирование, чтобы увидеть, содержит ли карта строку, «квадрат» - но значения в вашей карте являются ArrayList < Строка > объектов.

Если вы знаете, что ищете форму, вы можете сначала получить список «shape» и проверить, содержит ли она определенную форму «квадрат».

ArrayList<String> shapes = map.get("shape"); 
    boolean containsSquare = shapes.contains("square"); 
+0

Thx! Теперь я знаю, почему ..: D – zangetsKid

+0

Добро пожаловать. И добро пожаловать в StackOverflow. Вы можете * upvote * ответы, которые вы найдете полезными, нажав на верхний треугольник влево. Вы можете * принять * самый полезный ответ, нажав на галочку слева. –

3

Нечто подобное ниже будет работать

Map<String,ArrayList<String>> map=new TreeMap<String, ArrayList<String>>(); 
      Collection<ArrayList<String>> values=map.values(); 
      for(ArrayList<String> list:values) 
      { 
       list.contains("text_to_search") 
       { 

       } 
      } 
0
public boolean valueExists(String value){ 
for(Map.Entry<String,ArrayList<String>> entry : treeMap.entrySet()) { 
    String key = entry.getKey(); 
    ArrayList<String> values = entry.getValue(); 
    for (String str:values){ 
    if (value.equals(str)){ 
     return true; 
    } 
    } 

} 
return false; 
} 
+0

Ваши дженерики не совсем правы, 'Map.Entry ' должен быть 'Map.Entry >'. –

+0

@BoristheSpider oh Я только что редактировал свой пост, чтобы внести исправления. –

Смежные вопросы