gpt4 book ai didi

java - 有效的方法。 Java中比较列表元素的方法

转载 作者:行者123 更新时间:2023-12-02 01:29:33 25 4
gpt4 key购买 nike

有没有**有效的方法**可以比较Java中的元素并打印出出现过一次的元素的位置。例如:如果我有一个列表:[“Hi”,“Hi”,“No”],我想打印出 2,因为“No”位于位置 2。我已经使用以下算法解决了这个问题,并且它有效, 但是问题是,如果我有一个很大的列表,则需要花费太多时间来比较整个列表才能打印出唯一单词的第一个位置。

ArrayList<String> strings = new ArrayList<>();

for (int i = 0; i < strings.size(); i++) {
int oc = Collections.frequency(strings, strings.get(i));
if (oc == 1)
System.out.print(i);
break;
}

最佳答案

我可以考虑计算每个元素的出现次数并过滤掉第一个元素,但不确定您的列表有多大。

使用流:

List<String> list = Arrays.asList("Hi", "Hi", "No");
//iterating thorugh the list and storing each element and their no of occurance in Map
Map<String, Long> counts = list.stream().collect(Collectors.groupingBy(Function.identity(), LinkedHashMap::new, Collectors.counting()));
String value = counts.entrySet().stream()
.filter(e -> e.getValue() == 1) //filtering out all the elements which have more than 1 occurance
.map(Map.Entry::getKey) // creating a stream of element from map as all of these have only single occurance
.findFirst() //finding the first element from the element stream
.get();
System.out.println(list.indexOf(value));

编辑:
简化版本可以是

Map<String, Long> counts2 = new LinkedHashMap<String, Long>();
for(String val : list){
long count = counts2.getOrDefault(val, 0L);
counts2.put(val, ++count);
}
for(String key: counts2.keySet()){
if(counts2.get(key)==1){
System.out.println(list.indexOf(key));
break;
}
}

基本思想是计算每个元素的出现次数并将它们存储在 Map 中一旦您计算了所有元素出现的次数。那么你可以简单地检查第一个元素,其中第一个元素的计数为 1。

关于java - 有效的方法。 Java中比较列表元素的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73660191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com