gpt4 book ai didi

Java HashSet 保留第一个和最后一个元素

转载 作者:行者123 更新时间:2023-11-30 02:14:58 25 4
gpt4 key购买 nike

我正在尝试使用java从字符列表中删除重复项。

示例:

[a, c, b] ---> 字符列表 1

[a, c, e, b] ---> 字符列表 2

[a, c, a, c, e, b] ---> 字符列表 3

对于第一个和第二个列表,因为我们没有重复项,所以需要修改它们,但是对于第三个列表,我们确实有重复项,所以我需要删除重复项而不触及列表的第一个和最后一个元素,因此最终结果将是[a、c、e、b]

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;


public class Execution {

public static void main(String[] args) {
execution();

}

private static <V> void execution() {
Graph<Character> graph = new Graph<>(
new Edge<>('a', 'c', 1.0),
new Edge<>('c', 'a', 1.0),

new Edge<>('b', 'c', 2.0),
new Edge<>('c', 'b', 2.0),

new Edge<>('c', 'e', 1.0),
new Edge<>('e', 'c', 1.0),

new Edge<>('b', 'e', 1.0),
new Edge<>('e', 'b', 1.0),

new Edge<>('e', 'd', 3.0),
new Edge<>('d', 'e', 3.0),

new Edge<>('d', 'b', 2.0),
new Edge<>('b', 'd', 2.0)

);

List<Path<Character>> paths = new DefaultKShortestPathFinder<Character>().findShortestPaths('a', 'b', graph, 3);
List<List<Character>> nodes = new ArrayList<List<Character>>();
List<HashSet<Character>> modified = new ArrayList<HashSet<Character>>();

for(Path<Character> path:paths) {
nodes.add(path.getNodeList());

}


for(List<Character> p:nodes) {
modified.add(new HashSet<>(p));

}

for(HashSet<Character> n:modified) {
System.out.println(n);

}


}

}

我的代码的输出:

[a, b, c] [a, b, c, e] [a, b, c, e]

最佳答案

I want to remove the duplication but when i use the HashSet it removes my first and last element

HashSet不删除第一个或最后一个元素。 HashSet防止重复并且没有顺序,因此 HashSet 中的第一个或最后一个元素没有意义。 .

如果我理解这个问题,您想删除重复项,同时保留原始 List 元素的顺序。 s。使用LinkedHashSet (保留插入顺序):

modified.add(new LinkedHashSet<>(p));

实际上,这只会将第一个元素保留在第一个位置,因此如果原始 List 的最后一个元素多次出现,它不会停留在最后一个位置(因为 List 的最后一个位置将包含已添加到 Set 的字符)。您必须将其删除并重新添加到 Set创建modified.add(new LinkedHashSet<>(p))后打电话。

for(List<Character> p:nodes) {
LinkedHashSet<Character> set = new LinkedHashSet<>(p);
set.remove(p.get(p.size()-1));
set.add(p.get(p.size()-1));
modified.add(set);
}

关于Java HashSet 保留第一个和最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48862805/

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