class Pair<t1,t2>
{
int i, j;
Pair(int i,int j){
this.i=i;
this.j=j;
}
}
public class My
{
public static void main(String[] args) {
Pair p;
List<Pair<Integer,Integer>> src = Arrays.asList(new Pair(1,2),
new Pair(2,3), new Pair(2,1),new Pair(1,2));
HashSet<String> dest = new HashSet();
for(int i=0; i < src.size(); i++) {
p=src.get(i);
if(dest.contains(p.j+" "+p.i)) {
System.out.println("duplicacy");
}
else {
dest.add(p.i+" "+p.j);
}
}
System.out.println("set is = "+dest);
List<Pair<Integer,Integer>> ans=new ArrayList();
String temp;
int i,j;
Iterator<String> it=dest.iterator();
while(it.hasNext())
{
temp=it.next();
i=Integer.parseInt(temp.substring(0,temp.indexOf(' ')));
j=Integer.parseInt(temp.substring(temp.indexOf('
')+1,temp.length()));
ans.add(new Pair(i,j));
}
for(Pair i_p:ans) {
System.out.println("Pair = "+i_p.i+" , "+i_p.j);
}
}//end of main method
}//end of class My
这段代码运行良好,但我想知道它的性能,我指的是它的总体时间复杂度?
>
如果可以修改pair
类,只需实现equals()
和hashcode()
:
public class Pair {
private int a;
private int b;
public Pair(int a, int b) {
this.a = a;
this.b = b;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Pair pair = (Pair) o;
return (a == pair.a && b == pair.b) || (a == pair.b && b == pair.a);
}
@Override
public int hashCode() {
return Objects.hashCode(new HashSet<>(Arrays.asList(a,b)));
}
@Override
public String toString() {
return "Pair{" +
"a=" + a +
", b=" + b +
'}';
}
}
然后只需创建一个新的集
:
List<Pair> pairs = Arrays.asList(new Pair(1, 2), new Pair(2, 1), new Pair(3, 2));
Set<Pair> pairSet = new HashSet<>(pairs);
System.out.println(pairSet);
输出:
[Pair{a=1, b=2}, Pair{a=3, b=2}]
List<Pair> pairs = Arrays.asList(new Pair(1, 2), new Pair(2, 1), new Pair(3, 2));
Set<Pair> pairSet = pairs.stream()
.map(pair -> new HashSet<>(Arrays.asList(pair.getA(), pair.getB())))
.distinct()
.map(integers -> {
Iterator<Integer> iterator = integers.stream().iterator();
return new Pair(iterator.next(), iterator.next());
})
.collect(Collectors.toSet());
System.out.println(pairSet);
[Pair{a=1, b=2}, Pair{a=2, b=3}]
List<Pair> list = new ArrayList<>(set);
我有一个arraylist,它包含一对整数(例如int i,int j)。但它可能包含重复对(如(int i,int j)和(int j,int i))。现在如何在O(n)时间复杂度中去除重复。
所以我正在尝试创建这个循环,它可以从ArrayList中移除给定字符串中的特定字符。问题是,当一行中有两个相同的字符时,它会遗漏第二个字符,因为当第一个字符被移除时,第二个字符会在数组列表中向下推一个位置。这是我目前所掌握的。有人知道怎么解决这个吗?我仍然是java的初学者,所以任何帮助都将非常感谢。 从本例中打印出来的内容在:[u,B,u,o,p]之后,而我希望它在:[u,u,o,p]之后
问题内容: 我有一个,并且我想从中删除重复的字符串。我怎样才能做到这一点? 问题答案: 如果你不想在中添加重复项,则应考虑为什么要使用允许重复项的。删除重复元素的最简单方法是将内容添加到中(不允许重复),然后将其添加回中: 当然,这破坏了中元素的顺序。
我需要编写一个逻辑来检查一个列表是否有任何重复项,如果有,它会删除它们,并返回一个新的列表,其中包含没有重复/删除的项。下面是我尝试过但没有成功的方法。 Customer.java: 以下是添加后的响应列表: 在上面列出两个具有相同细节的对象的情况下,(即)["id": 123]是重复的。我在所有对象中添加了String(),equals(),hashcode(),并将其传递给hashSet 但我
但是我们不能在集合中存储HashMap。我想要HashMap与键,值对作为返回值,这将被添加到列表中。也就是说,最终的值应该采用ArrayList>格式。 你能在这方面帮助我吗?谢了。
问题内容: 如何从ArrayList中删除重复的元素? 问题答案: 如果你不想在中添加重复项,则应考虑为什么要使用允许重复项的。删除重复元素的最简单方法是将内容添加到中(不允许重复),然后将其添加Set回中ArrayList: 当然,这会破坏中的元素顺序。