标签:相等 Java HashSet int equals add 数组 new
import java.util.*;
class Untitled {
public static void main(String[] args) {
Set<int[]> s = new HashSet<>();
s.add(new int[] {1, 2});
s.add(new int[] {3, 4});
s.add(new int[] {1, 2});
System.out.println(s.size()); // 输出:3
}
}
Java中基本类型比较相等是只比较内容(值)是否相等,对象类型则通过hashCode
和equals
方法比较两个对象是否相等。int[]
等数组类型在Java中是对象类型,不是基本数据类型,Java提供给我们的对象类型我们不好重写hashCode
和equals
方法从而自定义比较方式。但是,我们可以通过Arrays.equals(arr1, arr2)
方法比较两个数组中存储的值是否相等。比如:
int[] a = new int[] { 0, 0 };
HashSet<int[]> set = new HashSet<>();
set.add(a);
int[] b = new int[] { 0, 0 };
boolean contains = set.stream().anyMatch(c -> Arrays.equals(c, b));
System.out.println("Contains? " + contains); // 输出:true
从而重写开头的程序:
import java.util.*;
class Untitled {
public static void main(String[] args) {
Set<int[]> s = new HashSet<>();
int[] t1 = new int[] {1, 2};
if (!hasContains(s, t1)) s.add(t1);
int[] t2 = new int[] {3, 4};
if (!hasContains(s, t2)) s.add(t2);
int[] t3 = new int[] {1, 2};
if (!hasContains(s, t3)) s.add(t3);
System.out.println(s.size()); // 输出:2
}
private static boolean hasContains(Set<int[]> s, int[] t) {
boolean contains = s.stream().anyMatch(e -> Arrays.equals(e, t));
return contains;
}
}
更有效率的写法是(推荐)使用List
代替int[]
数组:
import java.util.*;
class Untitled {
public static void main(String[] args) {
Set<ArrayList<Integer>> s = new HashSet<>();
s.add(List.of(1, 2));
s.add(List.of(3, 4));
s.add(List.of(1, 2));
System.out.println(s.size()); // 输出:2
}
}
Preference
- Check if an array exists in a HashSet<int[]>
- HashSet usage with int arrays
- How to overide equals for array in Java?
- ArrayList
vs ArrayList<int[]>?
标签:相等,Java,HashSet,int,equals,add,数组,new 来源: https://www.cnblogs.com/houhaibushihai/p/16492576.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。