java.lang.IndexOutOfBoundsException:索引:0,大小:0异常

Man*_*nju 4 java indexoutofboundsexception

我收到错误java.lang.IndexOutOfBoundsException:Index:0,Size:0.

public Collection<AdDistribution> getAdDistribution(byte srch, byte cont) throws IndexOutOfBoundsException {

    List<AdDistribution> mediums = new ArrayList<>();
    List<AdDistribution> adDistribution = new ArrayList<>();
            adDistribution.add(AdDistribution.SEARCH);
            adDistribution.add(AdDistribution.CONTENT);
            if (adDistribution.isEmpty()) {
                return null;
              }

    if (srch == 0 && cont == 0) {
        mediums = new ArrayList<>();
        mediums.set(0, adDistribution.get(0));
    }
    if (srch == 1 || cont == 1) {
        mediums = new ArrayList<>();
        if (srch == 1) {
            mediums.set(0, adDistribution.get(0));
        } else if (cont == 1) {
            mediums.set(0, adDistribution.get(1));
        }
    }
    if (srch == 1 && cont == 1) {
        mediums = new ArrayList<>();
        mediums.set(0, adDistribution.get(0));
        mediums.set(1, adDistribution.get(1));
    }
            return mediums;
}
Run Code Online (Sandbox Code Playgroud)

Dev*_*mar 8

问题是您使用set方法更新索引0处的元素

set(index,value)方法需要一个元素来呈现该索引

但是之前你没有在媒体arraylist中添加任何元素.

所以你需要先在索引0处添加一个元素,然后才能用set方法更新它


And*_*ner 5

您需要使用

mediums.add(adDistribution.get(0));
Run Code Online (Sandbox Code Playgroud)

而不是mediums.set(0, adDistribution.get(0));

ArrayList.set(int, Object) 要求要替换的元素:

用指定的元素替换此列表中指定位置的元素。

抛出: IndexOutOfBoundsException-如果索引超出范围(索引<0 ||索引> = size())

在一个新的列表,size() == 0,所以set(0, something)失败。