在java中,获取对象列表计数的最有效方法是什么?

在java中,获取对象列表计数的最有效方法是什么?,java,arrays,list,arraylist,Java,Arrays,List,Arraylist,我有一个列表和一个对象,如下所示 List<MyObj> myList; public class MyObjextends { String parameter1; public String getParameter1() { return parameter1; } } int count = 0; for( MyObj obj: myList) { if( obj.getParamet

我有一个列表和一个对象,如下所示

List<MyObj> myList;

public class MyObjextends
{
   String parameter1;

    public String getParameter1()
    {
        return parameter1;
    }
}
    int count = 0;
    for( MyObj obj: myList)
    {
        if( obj.getParameter1().equals( "Somet_Text") )
        {
            count++;
        }
    }

有人能告诉我怎么做吗?

使用从parameter1到MyObj列表的映射,然后可以使用映射的大小。获取一些文本可以将列表封装在一个类中,该类也有一个HashMap。仅允许通过控制哈希映射的方法访问列表。无论何时将项目添加到列表中,都应将其添加到哈希映射中

如果使用列表结构,则必须使用循环。如果您不这样做,您使用的api将以任何方式进行

如果这是你要解决的主要问题,你可以考虑使用MultMAP结构。就像番石榴的地图


事实上,它有点像map

我不明白为什么不使用for循环来迭代列表,即使效率是一个考虑因素,实际上也根本不重要。但即使这样,如果您反对for,也可以使用迭代器for list

ListIterator<MyObj> it=myList.listIterator();
int count = 0;

    while(it.hasNext()){

if( it.next().getParameter1().equals( "Somet_Text") )
        {
            count++;
        }
}

但请注意,它使用if语句和递增游标遍历列表,这同样类似于for循环。

您没有真正的理由不希望在有序数组中搜索,因为接口列表带有循环。这个循环的大O符号应该是,它正是假装的

如果您必须处理来自大量输入的数据,我建议您通过丢弃具有您不想要的值的对象来预处理信息,并使用您真正需要的值创建数组


评论的映射解决方案也不能解决您的问题,因为一个构造规则是不允许重复值,这正是您想要测量的。

请告诉我们您不想使用for循环的原因。如果不使用哈希表或Java等效项,已经有一段时间了,您将无法对项的属性执行直接索引查找;您需要在列表中循环查看该项是否在其中。因此,要对符合特定条件的项目进行计数,您必须在列表中循环。如果不能,您可以将循环封装在某个通用的util函数中,但无法摆脱它否,OP似乎只想对符合其条件的对象进行计数请参见obj.getParameter.equals`
public E More ...next() {
            checkForComodification();
            int i = cursor;
            if (i >= size)
                 throw new NoSuchElementException();
             Object[] elementData = ArrayList.this.elementData;
            if (i >= elementData.length)
                throw new ConcurrentModificationException();
             cursor = i + 1;
             return (E) elementData[lastRet = i];
     }