我正在使用ArrayList<String>并且在特定索引处添加数据,如何检查特定索引是否存在?
我应该简单地get()检查一下值吗?还是应该等待例外?还有另一种方法吗?
更新资料
感谢您的回答,但是由于我仅在特定索引处添加内容,因此列表的长度不会向我显示可用的内容。
我正在使用ArrayList<String>并且在特定索引处添加数据,如何检查特定索引是否存在?
我应该简单地get()检查一下值吗?还是应该等待例外?还有另一种方法吗?
感谢您的回答,但是由于我仅在特定索引处添加内容,因此列表的长度不会向我显示可用的内容。
Answers:
该方法arrayList.size() 返回列表中的项目数-因此,如果索引大于或等于,则该索引size()不存在。
if(index >= myList.size()){
//index not exists
}else{
// index exists
}
size()”,因为它是从零开始的索引。
index = 0,我list.size() == 0也将从这里开始。因此,我第一次检查它为true时,我将为该列表做准备。但是下一次使用该索引时,我的索引仍将保持不变index = 0,现在我应该在做某事时正在重新初始化列表中的该元素。第一种想法是在&&第二种条件下,list.get(index) == null但没有用,是为什么会有这样的问题
虽然您有关于使用列表大小的许多建议,这些建议适用于具有线性条目的列表,但似乎没有人读过您的问题。
如果您在不同的索引处手动添加条目,那么这些建议都不会起作用,因为您需要检查特定的索引。
使用if(list.get(index)== null)也不起作用,因为get()会引发异常,而不是返回null。
试试这个:
try {
list.get( index );
} catch ( IndexOutOfBoundsException e ) {
list.add( index, new Object() );
}
如果索引不存在,则在此处添加新条目。您可以更改它以执行其他操作。
try/catch这种工作,它会使您的程序速度降低50%或更多。.错误检查在现有代码中增加了束缚,从而降低了速度。.最好避免在关键区域使用它。检查length在这种情况下,你能做的最好的事情,因为index总是会少那么length,旧index的将得到转移,并成为新index的,如果你remove他们,所以这就是为什么对于规则检查length始终正常工作。
通常我只是检查索引是否小于数组大小
if (index < list.size()) {
...
}
如果您还担心index为负值,请使用以下命令
if (index >= 0 && index < list.size()) {
...
}
关于您的更新(可能应该是另一个问题)。您应该使用这些对象的数组而不是ArrayList,因此您可以简单地检查值是否为null:
Object[] array = new Object[MAX_ENTRIES];
..
if ( array[ 8 ] == null ) {
// not available
}
else {
// do something
}
最佳实践
如果数组中没有数百个条目,则应考虑将其组织为一个类,以消除3,8等魔术数字。
使用异常的控制流是一种不好的做法。
由于java-9存在检查索引是否属于数组的标准方法-Objects#checkIndex():
List<Integer> ints = List.of(1,2,3);
System.out.println(Objects.checkIndex(1,ints.size())); // 1
System.out.println(Objects.checkIndex(10,ints.size())); //IndexOutOfBoundsException
of()Java 9中也将方法添加 到类List中:docs.oracle.com/javase/9/docs/api/java/util/List.html#of--
快速而肮脏的测试是否存在索引。在实现中的替换列表中正在使用您的列表进行测试。
public boolean hasIndex(int index){
if(index < list.size())
return true;
return false;
}
或对于2Dimensional ArrayLists ...
public boolean hasRow(int row){
if(row < _matrix.size())
return true;
return false;
}
.length它,list.size()但没什么大不了的,我一直这样搞糟,哈哈,我依靠编译器来指导我。您可能正在考虑原始数组
如果索引小于列表的大小,则该索引确实存在,可能具有null值。如果索引较大,则可以调用ensureCapacity() 以使用该索引。
如果要检查索引处的值是否为null,请致电get()
您可以检查数组的大小。
package sojava;
import java.util.ArrayList;
public class Main {
public static Object get(ArrayList list, int index) {
if (list.size() > index) { return list.get(index); }
return null;
}
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(""); list.add(""); list.add("");
System.out.println(get(list, 4));
// prints 'null'
}
}