编辑:在您进行编辑并意识到您需要什么之后,我提出了这个想法。检查这段代码,这是给API >= 24的:
注意:如果您希望您的值保持与插入时相同的顺序,请使用LinkedHashMap,否则您可以使用HashMap。
import java.util.Map;
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
public class Main
{
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("Cow");
list.add("Sheep");
list.add("Lamb");
list.add("Cow");
list.add("Chicken");
list.add("Sheep");
Map<String, List<Integer>> indexes = new HashMap<>();
for (int i = 0; i < list.size(); i++) {
indexes.computeIfAbsent(list.get(i), c -> new ArrayList<>()).add(i);
}
System.out.println(indexes);
}
}
输出如下:
{Sheep=[1, 5], Chicken=[4], Cow=[0, 3], Lamb=[2]}
使用LinkedHashMap输出到这里:
{Cow=[0, 3], Sheep=[1, 5], Lamb=[2], Chicken=[4]}
这将返回列表中位置的索引。
第二次编辑:这是给API < 24
Map<String, List<Integer>> indexes2 = new HashMap<>();
for (int i = 0; i < list.size(); ++i) {
String key = list.get(i);
if (indexes2.get(key) == null) {
List<Integer> list1 = new ArrayList<Integer>();
list1.add(i);
indexes2.put(key, list1);
} else {
List<Integer> list2 = indexes2.get(key);
list2.add(i);
indexes2.put(key, list2);
}
}
System.out.println(indexes2);
这个输出:
{Sheep=[1, 5], Cow=[0, 3], Chicken=[4], Lamb=[2]}
第一答案:这用于过滤值,以便您可以删除重复项。
为此,您可以像这样使用HashSet 或LinkedHashSet:
ArrayList<String> list_with_duplicate_items = new ArrayList<String>();
list_with_duplicate_items.add("Cow");
list_with_duplicate_items.add("Sheep");
list_with_duplicate_items.add("Lamb");
list_with_duplicate_items.add("Chicken");
list_with_duplicate_items.add("Cow");
list_with_duplicate_items.add("Sheep");
HashSet<String> filter = new HashSet(list_with_duplicate_items);
ArrayList<String> new_list = new ArrayList<String>(filter); //or just add to your first ArrayList like list_with_duplicate_items = new ArrayList<String>(filter);