在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];
}