我正在使用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'
}
}