日期:2014-05-20  浏览次数:20823 次

求解决~~~ArrayList越界怎么解决?
import java.util.*;
public class PipeLinedQuery {
private static HashMap<Integer,ArrayList<String>> hashmapA=new HashMap<Integer,ArrayList<String>>();
private static HashMap<Integer,ArrayList<String>>hashmapB=new HashMap<Integer,ArrayList<String>>();
private static HashMap<Integer,ArrayList<String>>hashmapC=new HashMap<Integer,ArrayList<String>>();
private static ArrayList <String>listC=new ArrayList<String>();

public void AlgorithmOfExpect(){

 
for(Iterator i=hashmapA.keySet().iterator();i.hasNext();){
Integer intergerA = (Integer)i.next();
ArrayList<String> listA = hashmapA.get(intergerA);
for(Iterator j=hashmapB.keySet().iterator();j.hasNext();){
Integer integerB=(Integer)j.next();
ArrayList<String> listB=hashmapB.get(integerB);
for(int k=listA.size();k>0;k--){
boolean res=true;
for(int p=listB.size();p>0;p--){


if(listA.get(k).toString()==(listB.get(p).toString())){
res=false;
}
}
if(res){
listC.add(listA.get(k));
System.out.println(listA.get(k));

}
}

}

}
System.out.println(listC);
}
public static void main(String args[]){
PipeLinedQuery q=new PipeLinedQuery();
ArrayList<String> listA=new ArrayList<String>();
ArrayList<String> listB=new ArrayList<String>();
  ArrayList<String>listD=new ArrayList<String>();
 
listA.removeAll(listA);
listA.retainAll(listB);
hashmapA.remove(hashmapA);
hashmapB.remove(hashmapB);

listA.add("AAA");
listA.add("aaa");
listA.add("AAAAA");
listA.add("bbbb");
listA.add("kkkkk");

listB.add("OOOO");
listB.add("bbbb");
listB.add("kkkkk");
listB.add("ppppp");
listB.add("nnnn");
listD.add("AAA");
  listD.add("OOOO");
  listD.add("xiust");
  listD.add("bbbb");
  listD.add("ppppp");
   
  
   

hashmapA.put(1, listA);
hashmapA.put(2, listB);
hashmapA.put(3,listD);
hashmapB.put(1, listA);
hashmapB.put(2, listD);
hashmapB.put(3, listB);
q.AlgorithmOfExpect();
}

------解决方案--------------------
这两句话的循环边界控制都有问题:
for(int k=listA.size();k>0;k--){
for(int p=listB.size();p>0;p--){

因为List下标是:0~size()-1

应该是这样的:
for(int k=listA.size()-1;k>=0;k--){
for(int p=listB.size()-1;p>=0;p--){