Java 将列表数据放入映射时获取异常

Java 将列表数据放入映射时获取异常,java,Java,我正在迭代一个列表,并将其内容放在地图上,但问题是,当我返回该地图时,我发现了一个异常,请您告诉我它背后的原因。我得到java.lang.IndexOutOfBoundsException:Index:100,Size:100,因为我的列表大小是100 for(Map.Entry<Long, Integer> entries : result.entrySet()) { pairList.add(new Pair(entries.getKey(), entries.getVa

我正在迭代一个列表,并将其内容放在地图上,但问题是,当我返回该地图时,我发现了一个异常,请您告诉我它背后的原因。我得到java.lang.IndexOutOfBoundsException:Index:100,Size:100,因为我的列表大小是100

for(Map.Entry<Long, Integer> entries : result.entrySet()) {
    pairList.add(new Pair(entries.getKey(), entries.getValue()));
}

int sum = 0;
int min = -1;
int max = -1;

int i = 0;
Pair p = pairList.get(i);

@SuppressWarnings("rawtypes")
//Iterator iterator = pairList.iterator();
Iterator iterator = pairList.listIterator();

while (iterator.hasNext()) {
    if(sum == 0){
        min = (int) p.key;
        max = (int) p.key;
    }
    sum += p.value;
    if(sum < BARRIER) {
        max = (int) p.key;
    } else {
        if(sum > BARRIER) {
            i--;
        } else {
            max = (int) p.key;
        }
        System.out.println(min+"_"+max);
        result1.put(min,max);

        sum = 0;
    }
    i++;
    p = pairList.get(i);
}

System.out.println("#########");

System.out.println(result1.size());
for (Map.Entry<Integer, Integer> entry : result1.entrySet()) {
    System.out.println(entry.getKey() + "/" + entry.getValue());
}
for(Map.Entry条目:result.entrySet()){
添加(新对(entries.getKey(),entries.getValue());
}
整数和=0;
int min=-1;
int max=-1;
int i=0;
配对p=配对列表get(i);
@抑制警告(“原始类型”)
//迭代器迭代器=pairList.Iterator();
迭代器迭代器=pairList.listIterator();
while(iterator.hasNext()){
如果(总和=0){
min=(int)p.key;
max=(int)p.key;
}
总和+=p.值;
if(总和<屏障){
max=(int)p.key;
}否则{
如果(总和>屏障){
我--;
}否则{
max=(int)p.key;
}
系统输出打印项次(最小值+最大值);
结果1.输入(最小值、最大值);
总和=0;
}
i++;
p=成对列表get(i);
}
System.out.println(“############”);
System.out.println(result1.size());
对于(Map.Entry:result1.entrySet()){
System.out.println(entry.getKey()+“/”+entry.getValue());
}

各位朋友,请建议如何克服这个问题。

数组是零索引的。e、 g.100个元素的数组实际的有效索引范围为[0,99]。我假设这发生在
p=pairList.get(I)行上

你需要实现一些逻辑来确保你没有越界。您已经在使用迭代器在
pairList
中进行迭代,这将保护您免受此影响,但您还混入了索引
i
,这违背了迭代器的用途

在尝试访问元素之前,至少要包含一个检查。比如:

if (i >= pairList.size())
    break;
你的问题是:

p = pairList.get(i);

如果列表大小为100,则允许的索引介于0到99之间。

您会遇到什么样的异常?你能给我们看一下stacktrace吗?你能帮我们吗?如果让我猜的话(我猜的,因为你在制造我们),你得到了一个
ConncurrentModificationException
,Javadoc告诉你,如果你在迭代过程中修改结构,将会发生什么。我发现一个异常,你能告诉我它背后的原因吗..我得到java.lang.IndexOutofBoundException:Index:100,大小:我的列表大小为100100@Brian你能告诉我如何克服这个问题吗数组是零索引的,这意味着你正在尝试访问100个元素数组的101个元素…非常感谢现在我怎么能从中恢复过来?我应该设置一个条件吗?你能告诉我这将有助于理解感谢吗?洛蒂用这种方式做了,请告诉我它是否正确。。而(iterator.hasNext()){if(i>=pairList.size())break;if(sum==0){min=(int)p.key;max=(int)p.key;}看起来不像是相关的代码。我认为您需要阅读一些基本知识,比如循环构造。