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()方法检查ArrayListsize() 。 这将返回最大的索引+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