我有一个整数的Arraylist。
我的要求是确定arraylist是否存在于指定索引处的元素。如果是,则应将值设置为该索引(使用set
方法),否则应将值添加到该索引位置(使用add
方法)
在我的java代码中找到处理上述条件有点困难。请帮助。
这是我到目前为止所拥有的:
ArrayList<Integer> tempArray = new ArrayList<Integer>();
int counter = 0;
int tempValue = 0;
For LOOP -
if (//certain conditions are satisfied){
tempValue = calculateNewValue();
tempArray.add(counter, tempValue); //Need some logic here to determine if its a set or add method to be used
}
if (//some other conditions are satisfied){
counter++;
}
end For LOOP
答案 0 :(得分:4)
您不需要循环。您可以使用ArrayList
has an indexOf方法来获取对象的第一个出现位置。请务必正确实施equals
。
ArrayList
also has an add
方法,允许您设置插入元素的索引。 Or a set method,这可能是你想要的(取决于你想要做什么)
答案 1 :(得分:4)
set方法用新元素替换指定位置的元素。 但是在add(position,element)中会将元素添加到指定位置,并将现有元素移动到数组的右侧。
ArrayList<String> al = new ArrayList<String>();
al.add("a");
al.add(1, "b");
System.out.println(al);
al.set(0, "c");
System.out.println(al);
al.add(0, "d");
System.out.println(al);
---------------输出------------------------------- ------
[a,b]
[c,b]
[d,c,b]
答案 2 :(得分:3)
其他答案已提供有关使用列表中可用的indexOf方法的信息。但是,只需添加一些关于&#34;添加&#34;之间差异的信息。和&#34;设置&#34;在java中的ArrayList中。
来自javadocs -
set(index, value)
方法 - 将指定元素插入此列表中的指定位置。将当前位置的元素(如果有)和右侧的任何后续元素移位(将其添加到索引中)。
increases your list size
- 用指定的元素替换此列表中指定位置的元素。
因此也使用add()而不是set(){{1}}。无论你是否需要这种行为,你都应该考虑这一点。
答案 3 :(得分:2)
您想要的是Map
而不是List
。
如果counter
大于List.size()
,会怎样?你是否根据需要添加了多少元素?
答案 4 :(得分:2)
以下是确定在数组中插入或替换值的位置的逻辑。
if (tempArray.indexOf(tempValue) < 0) {
tempArray.add(counter, tempValue);
} else {
tempArray.set(counter, tempValue);
}
P.S。最好将counter
重命名为index
。
答案 5 :(得分:1)
ArrayList.set(index,element)将指定的元素添加到列表中提到的索引处。这将是替换操作,因此列表大小将保持不变。 ArrayList.add(index,element)将指定的元素添加到列表中提到的索引处。这不是替换操作,因此它将首先右移提到的索引中的所有元素,最后将元素添加到索引位置。现在size = size + 1。
答案 6 :(得分:0)
ArrayList
有contains(Object o)
method,如果列表包含指定的元素&#34;&#34;返回true,同样您可以确定哪个方法add()
或{{1}使用。