我正在使用ArrayList<String>
并在特定索引处添加数据,
如何检查特定索引是否存在?
我应该只是get()
并检查价值吗?或者我应该等待例外?
还有另一种方式吗?
感谢您的回答,但由于我只是在特定索引处添加内容,因此列表的长度不会显示可用的内容。
答案 0 :(得分:127)
方法arrayList.size()
returns列表中的项目数 - 因此,如果索引大于或等于size()
,则它不存在。
if(index >= myList.size()){
//index not exists
}else{
// index exists
}
答案 1 :(得分:64)
虽然你有十几条关于使用列表大小的建议,这些建议适用于带有线性条目的列表,但似乎没有人能够阅读你的问题。
如果您在不同的索引处手动添加条目,这些建议都不起作用,因为您需要检查特定的索引。
使用 if(list.get(index)== null)也不会起作用,因为get()会抛出异常而不是返回null。
试试这个:
try {
list.get( index );
} catch ( IndexOutOfBoundsException e ) {
list.add( index, new Object() );
}
如果索引不存在,则添加新条目。你可以改变它来做一些不同的事情。
答案 2 :(得分:12)
这就是你需要的......
public boolean indexExists(final List list, final int index) {
return index >= 0 && index < list.size();
}
为什么不使用普通的旧阵列?我认为对List的索引访问是一种代码味道。
答案 3 :(得分:6)
关于您的更新(可能应该是另一个问题)。 您应该使用这些对象的数组而不是ArrayList, 所以你只需检查null的值:
Object[] array = new Object[MAX_ENTRIES];
..
if ( array[ 8 ] == null ) {
// not available
}
else {
// do something
}
最佳实践
如果阵列中没有数百个条目,你应该考虑将它组织成一个类来摆脱神奇的数字3,8等。
使用异常控制流是不好的做法。
答案 4 :(得分:5)
通常我只检查索引是否小于数组大小
function wd_hierarchical_tags_register() {
$labels = array(
'name' => 'Items',
'singular_name' => 'Item',
'menu_name' => 'Item',
'all_items' => 'All Items',
'parent_item' => 'Parent Item',
'parent_item_colon' => 'Parent Item:',
'new_item_name' => 'New Item Name',
'add_new_item' => 'Add New Item',
'edit_item' => 'Edit Item',
'update_item' => 'Update Item',
'separate_items_with_commas' => 'Separate Item with commas',
'search_items' => 'Search Items',
'add_or_remove_items' => 'Add or remove Items',
'choose_from_most_used' => 'Choose from the most used Items',
);
register_taxonomy( 'product_tag', 'product', array(
'labels' => $labels,
'hierarchical' => true,
) );
}
add_action('init', 'wd_hierarchical_tags_register');
如果您还担心索引为负值,请使用以下
if (index < list.size()) {
...
}
答案 5 :(得分:3)
您可以使用ArrayList
方法检查size()
的尺寸。这将返回最大索引+1
答案 6 :(得分:3)
由于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
答案 7 :(得分:1)
是否存在索引的快速和脏测试。在您的实现替换列表中使用您正在测试的列表。
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;
}
答案 8 :(得分:0)
如果您的索引小于列表的大小,则它确实存在,可能具有null
值。如果index更大,那么您可以调用ensureCapacity()
来使用该索引。
如果您想检查索引处的值是否为null
,请致电get()
答案 9 :(得分:0)
您可以检查数组的大小。
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'
}
}
答案 10 :(得分:0)
一种简单的方法:
try {
list.get( index );
}
catch ( IndexOutOfBoundsException e ) {
if(list.isEmpty() || index >= list.size()){
// Adding new item to list.
}
}