数组列表查找第一个和最后一个元素

2022-09-04 07:28:00

晚上好

我有一个ArrayList(实例化为ld_data),我向前和向后迭代/向用户显示元素数据。在这个过程中,我需要知道我什么时候在第一个元素和最后一个元素。检测我何时处于最后一个元素,我这样做:

if((index + 1) <= ld_data.size())
{
    ....
}

这是有效的,因为 size 属性也是 ArrayList 的上限。然而,检测我何时处于第一个元素对我来说并不容易。我所能弄清楚的最好的是这个,这似乎相当蹩脚....但它有效。

if((index - 1) >= (ld_data.size() - ld_data.size()))
{
    ....
}

在C# .NET世界中,我们有ArrayList.UpperBound或ArrayList.LowerBound在Java中是否有类似的东西?

新山

编辑:更多细节。因此,有关更多信息,我绑定到ListView。因此,当用户滚动到列表的第一个元素时,我想显示一个消息“在列表的开头”,当他们到达末尾时显示“列表的结尾”。我知道有一个滚动条可以清楚地表明这一点,我只是想举一个我正在做的事情的例子。因此,此检查发生在“OnScroll”事件中。


答案 1

它总是建议使用或循环访问列表。使用列表大小作为参考不会在修改列表数据(删除或插入元素)时起作用。IteratorsListIterator

迭代器 - 允许调用方沿一个方向循环访问列表,并在迭代期间使用明确定义的语义从基础集合中删除元素

可以使用 来循环访问列表。A 允许程序员在任一方向遍历列表,在迭代期间修改列表,并获取迭代器在列表中的当前位置。您可以参考以下示例。ListIteratorListIterator

ArrayList<String> list = new ArrayList<String>();
    ListIterator<String> iterator = list.listIterator();
    while(iterator.hasNext()){
        System.out.println(iterator.next());
        ...
        ...
        System.out.println(iterator.previous());
        if(!iterator.hasPrevious()){
            System.out.println("at start of the list");
        }else if(!iterator.hasNext()){
            System.out.println("at end of the list");
        }

    }

这只是一个示例,显示了 一个 的用法,请分析您的需求是什么,并根据需要实现。ListIterator


答案 2
List<YourData> list = new ArrayList<YourData>();

for(int index=0; index < list.size(); index++) {

    YourData currElement = list.get(index);

    if(index == 0) {
        //currElement is the first element
    }

    if(index == list.size() - 1) {
         //currElement is the last element
    }
}

推荐