我是以下代码。
String[] guest1 = { "surfing", "yoga", "walking" };
String[] guest2 = { "wine", "relaxation", "beach" };
ArrayList<String> list1 = new ArrayList<>();
list1.add("museums");
list1.add("canals");
list1.add("nightlife");
list1.add("walking");
ArrayList<String> list2 = new ArrayList<>();
list2.add("beach");
list2.add("surfing");
list2.add("relaxation");
ArrayList<String> list3 = new ArrayList<>();
list3.add("surfing");
list3.add("nightlife");
list3.add("beach");
list3.add("food");
list3.add("wine");
list3.add("walking");
String[] sagres = { "beach", "surfing", "relaxation" };
String[] biarritz = { "surfing", "nightlife", "beach", "food", "wine", "walking" };
Map map = new HashMap<String, ArrayList<String>>();
map.put("amsterdam", list1);
map.put("sagres", list2);
map.put("biarritz", list3);
for (int i = 0; i < map.size(); i++) {
System.out.println(map.keySet());
}
我试图通过循环大小来获取密钥和值。
我知道这可以使用
完成for (Object keys : map.keySet().toArray()) {
System.out.println(keys);
}
但我必须一次比较2个值并相应地工作。我想知道我是否可以使用size
和循环。
由于
答案 0 :(得分:1)
此代码获取Map
的条目集。然后迭代整个集合并打印出键和值,用逗号和制表符分隔。由于entry.getValue()
返回List<String>
,因此需要将其转换为String
进行连接。
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
System.out.println(entry.getKey() + ", \t" + entry.getValue().toString());
}
此外,一般做法是在声明List
时使用ArrayList
代替List
。这样,它保留了多态性。关于比较,你不清楚你想要比较什么,所以我不能真正给出答案。
答案 1 :(得分:0)
迭代器可以履行与索引类似的角色。
Iterator<Map.Entry<String, ArrayList<String>> iter1 = map.entrySet().iterator();
Iterator<Map.Entry<String, ArrayList<String>> iter2 = map.entrySet().iterator();
while (iter1.hasNext() || iter2.hasNext()) {
...
if (iter1.hasNext()) {
entry1 = iter1.next();
}
}
顺便说一句,它更常规,更少打字如下:
List<String> list1 = new ArrayList<>();
Map<String, List<String>> map = new HashMap<>();
这是将变量指定为接口,并使特定的实现类保持打开状态。也是方法参数的理想选择。