所以我有一个ArrayList,它希望在运行下面的ArrayList1之后创建对的出现的HashMap,使得B,C = 1。然后在运行ArrayList2之后的B,C将是B,C = 2
ArrayList1 = {A,B,C,D}
ArrayList2 = {D,B,C,A}
我打算使用HashMap< String,HashMap<字符串,整数>>因此,父哈希映射中的键将是B,子键将是C,因此在运行ArrayList1之后,对B,C = 1。 (对不起,如果我的术语错误,只是我称之为每个键)
我的问题是在循环遍历ArrayList时如何在不获取ArrayIndexOutOfBoundsException的情况下访问current和next元素。
答案 0 :(得分:1)
如果我正确的你想要打印出来的。像AB - 1, BC - 2, CD - 1, DB - 1, CA - 1
一样的对。因此,对于这样的场景,我会提出一个类似的解决方案:
lst = {A,B,C,D}
lst2 = {D,B,C,A}
Map<String, Integer> map = new HashMap<String, Integer>();
for ArrayList1
for(int i = 0; i<lst.size()-1; i++)
// checking whether pair already exists
if(map.containsKey(lst.get(i)+lst.get(i+1)))
map.put(lst.get(i)+lst.get(i+1), map.get(lst.get(i)+lst.get(i+1))+1); // if yes increment the current value by one
else
// else add the new key with value 1
map.put(lst.get(i)+lst.get(i+1), 1);
类似于ArrayList2
for(int i = 0; i<lst2.size()-1; i++)
// Checking for existing key in same map thus will increment any key matching that of lst keys or any in current lst2
if(map.containsKey(lst2.get(i)+lst2.get(i+1)))
map.put(lst2.get(i)+lst2.get(i+1), map.get(lst2.get(i)+lst2.get(i+1))+1);
else
map.put(lst2.get(i)+lst2.get(i+1), 1);
因此打印地图
Iterator<Entry<String, Integer>> itr = map.entrySet().iterator();
if(itr.hasNext())
itr.forEachRemaining(new Consumer<Entry<String, Integer>>() {
public void accept(Entry<String, Integer> t) {
System.out.println(t.getKey() +" --> " + t.getValue());
}
});
答案 1 :(得分:0)
你可以毫无例外地以这种方式循环Arraylist
for(String myVar : myArrayList){
//your logic here
}