java:ArrayList – 我如何检查索引是否存在?
我正在使用ArrayList<String>
并在特定的索引处添加数据,如何检查特定的索引是否存在?
我应该只是get()
并检查值? 或者我应该等待一个exception? 有另一种方法吗?
更新
谢谢你的答案,但是因为我只是在特定的索引处添加东西,所以列表的长度不会显示哪些是可用的。
方法arrayList.size()
返回列表中的项目数 – 所以如果索引大于或等于size()
,它不存在。
虽然你有十几条关于使用列表大小的build议,这些列表适用于线性条目列表,但似乎没有人读到你的问题。
如果您在不同的索引处手动添加条目,则不需要这些build议,因为您需要检查特定的索引。
使用if(list.get(index)== null)也不会工作,因为get()抛出exception而不是返回null。
尝试这个:
try { list.get( index ); } catch ( IndexOutOfBoundsException e ) { list.add( index, new Object() ); }
如果索引不存在,这里添加一个新条目。 你可以改变它做一些不同的事情。
这是你需要的…
public boolean indexExists(final List list, final int index) { return index >= 0 && index < list.size(); }
为什么不使用普通的旧数组? 索引访问列表是我想的代码味道。
关于你的更新(这可能应该是另一个问题)。 你应该使用这些对象的数组来代替ArrayList,所以你可以简单地检查null的值:
Object[] array = new Object[MAX_ENTRIES]; .. if ( array[ 8 ] == null ) { // not available } else { // do something }
最佳实践
如果你的数组中没有数百个条目,你应该考虑把它组织成一个类来摆脱魔术数字3,8等。
控制stream程使用exception是不好的做法。
您可以使用size()
方法检查ArrayList
的size()
。 这将返回最大的索引+1
如果您的索引小于您的列表大小,那么它确实存在,可能是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' } }
快速和肮脏的testing索引是否存在与否。 在你的实现中replace列表你正在testing你的列表。
public boolean hasIndex(int index){ if(index < list.size()) return true; return false; }
或2D维ArrayLists …
public boolean hasRow(int row){ if(row < _matrix.size()) return true; return false; }
由于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