访问当前元素和下一个元素 arraylist 而不会越界异常
Access current element and next element arraylist without getting out of bounds exception
所以我有一个 ArrayList,它想要对出现的对进行 HashMap,因此 B,C = 1 在 运行 之后通过下面的 ArrayList1。然后 B,C 在 运行 之后通过 ArrayList2 将是 B,C = 2
ArrayList1 = {A,B,C,D}
ArrayList2 = {D,B,C,A}
我正计划使用 HashMap< String, HashMap< String,Integer >> 这样父 hashmap 中的键将是 B 而子键将是 C 所以 [=17= 之后的对 B,C = 1 ] 通过 ArrayList1。 (抱歉,如果我的术语有误,我对每个键的称呼都是错误的)
我的问题是在没有获得 ArrayIndexOutOfBoundsException 的情况下循环遍历 ArrayList 时如何访问当前元素和下一个元素。
你可以用这种方式循环Arraylist,无一例外
for(String myVar : myArrayList){
//your logic here
}
If 我没看错你要打印号码。成对的顺序如 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>();
对于 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());
}
});
所以我有一个 ArrayList,它想要对出现的对进行 HashMap,因此 B,C = 1 在 运行 之后通过下面的 ArrayList1。然后 B,C 在 运行 之后通过 ArrayList2 将是 B,C = 2
ArrayList1 = {A,B,C,D}
ArrayList2 = {D,B,C,A}
我正计划使用 HashMap< String, HashMap< String,Integer >> 这样父 hashmap 中的键将是 B 而子键将是 C 所以 [=17= 之后的对 B,C = 1 ] 通过 ArrayList1。 (抱歉,如果我的术语有误,我对每个键的称呼都是错误的)
我的问题是在没有获得 ArrayIndexOutOfBoundsException 的情况下循环遍历 ArrayList 时如何访问当前元素和下一个元素。
你可以用这种方式循环Arraylist,无一例外
for(String myVar : myArrayList){
//your logic here
}
If 我没看错你要打印号码。成对的顺序如 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>();
对于 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());
}
});