访问当前元素和下一个元素arraylist而不会超出边界异常

时间:2015-02-12 17:06:30

标签: java arraylist hashmap

所以我有一个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元素。

2 个答案:

答案 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
}