获取对象';Java列表中的索引
我的(Android)Java程序中有一个字符串列表,我需要获取列表中某个对象的索引。问题是,我只能找到关于如何查找对象的第一个和最后一个索引的文档。如果我的列表中有3个或更多相同的对象,该怎么办?如何找到每个索引获取对象';Java列表中的索引,java,android,list,indexing,Java,Android,List,Indexing,我的(Android)Java程序中有一个字符串列表,我需要获取列表中某个对象的索引。问题是,我只能找到关于如何查找对象的第一个和最后一个索引的文档。如果我的列表中有3个或更多相同的对象,该怎么办?如何找到每个索引 谢谢 您需要进行暴力搜索: static <T> List<Integer> indexesOf(List<T> source, T target) { final List<Integer> indexes = ne
谢谢 您需要进行暴力搜索:
static <T> List<Integer> indexesOf(List<T> source, T target)
{
final List<Integer> indexes = new ArrayList<Integer>();
for (int i = 0; i < source.size(); i++) {
if (source.get(i).equals(target)) { indexes.add(i); }
}
return indexes;
}
静态列表索引(列表源,T目标)
{
最终列表索引=新的ArrayList();
对于(int i=0;i
请注意,这不一定是最有效的方法。根据上下文和列表的类型/大小,您可能需要进行一些认真的优化。关键是,如果您需要每个索引(并且对列表内容的结构一无所知),那么您需要对每个项目进行死搜索,最好是O(n)成本
根据基础列表的类型,
get(i)
可能是O(1)(ArrayList
)或O(n)(LinkedList
),因此这可能会扩展到O(n2)实现。您可以复制到ArrayList
,也可以在LinkedList中手动递增索引计数器。如果文档在这种情况下对我的逻辑没有帮助,我会选择一种原始方法,在循环中遍历列表,并在找到匹配项的地方保存索引
ArrayList<String> obj = new ArrayList<String>();
obj.add("Test Data"): // fill the list with your data
String dataToFind = "Hello";
ArrayList<Integer> intArray = new ArrayList<Integer>();
for(int i = 0 ; i<obj.size() ; i++)
{
if(obj.get(i).equals(dataToFind)) intArray.add(i);
}
now intArray would have contained all the index of matched element in the list
arraylistobj=newarraylist();
添加(“测试数据”)://用数据填充列表
字符串dataToFind=“Hello”;
ArrayList intArray=新的ArrayList();
对于(int i=0;i另一种蛮力方法,该方法还将查找所有null
索引:
static List<Integer> indexesOf(List<?> list, Object target) {
final List<Integer> indexes = new ArrayList<Integer>();
int offset = 0;
for (int i = list.indexOf(target); i != -1; i = list.indexOf(target)) {
indexes.add(i + offset);
list = list.subList(i + 1, list.size());
offset += i + 1;
}
return indexes;
}
静态列表索引(列表、对象目标){
最终列表索引=新的ArrayList();
整数偏移=0;
for(int i=list.indexOf(目标);i!=-1;i=list.indexOf(目标)){
索引。添加(i+偏移量);
list=list.subList(i+1,list.size());
偏移量+=i+1;
}
收益指标;
}
如果列表的大小很大,则需要进行优化。否则,对于较小的列表,这不会产生问题。我如何优化?我的列表大约有8000个项目。此代码将在线程中运行,但我仍然不想永远显示“请等待…”对话框。1)在有性能目标并可以衡量之前,不要进行优化;2) 如果您有一个ArrayList
,上述操作应该可以正常工作;3) 如果没有,建议您切换到使用ArrayList
,或者按照我上面的建议进行调整……如果需要每个匹配元素的索引,则必须检查列表中的每个元素。另一种方法是什么?或者,您可能需要将此列表维护为排序/有序列表,在这种情况下,更有效的解决方案会更容易一些。多说说你的应用程序——这是一个什么列表?很酷,谢谢大家。我来试试看结果如何!那么:yourList.indefOf(yourObjectInList);我正在使用java.util.ArrayList和方法indexOf(..)工作得很好