java set重复值是不存还是覆盖

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java set重复值是不存还是覆盖相关的知识,希望对你有一定的参考价值。

不存,这和map中不同,map中会覆盖。 参考技术A 因为你只重写了equals方法 没有重写hashCode方法HashSet判断元素是否相等,首先调用hashCode方法,如果hashCode的值一样, 那么调用equals方法,如果equals方法也一样,那么才算重复元素,不在添加所以没有重写hashCode方法的时候,stu2和stu3的hashCode值不一样,你就可以添加两次相同的元素修改后的代码import java.util.*;class Student private String id;private String name;public Student(String id, String name) this.id = id;this.name = name;public String toString() return id + ":" + name;public int HashCode() return this.id.hashCode();public boolean equals(Object obj) if (this == obj) return true;if (!(obj instanceof Student)) return false;Student stu = (Student) obj;boolean b = this.id.equals(stu.id);return b;public int hashCode() //重写hashCode方法final int prime = 31;int result = 1;result = prime * result + ((id == null) ? 0 : id.hashCode());result = prime * result + ((name == null) ? 0 : name.hashCode());return result;public class xuexi public static void main(String[] args) HashSet hs = new HashSet();Student stu1 = new Student("1", "Jack");Student stu2 = new Student("2", "Rose");Student stu3 = new Student("2", "Rose");hs.add(stu1);hs.add(stu2);hs.add(stu3);System.out.println(hs);测试[2:Rose, 1:Jack] 参考技术B set里面装的都是不同的数据,不会重复 参考技术C 看你实现是怎么写的啦

合并两个数组,并且把相同的数值覆盖掉

java中如何将两个数组合并,并将其中相同的值覆盖(一维数组)

java中合并数组,去掉重复的数据,可以使用set集合来取出,因为set是保存不可重复的数据的,实例如下:

public class test 
 public static void main(String[] args) 
  Set set=new TreeSet();//set集合,用来去掉重复的数据
  List list1=new ArrayList();//第一个集合
  list1.add(5);
  list1.add(3);
  list1.add(1);
  List list2=new ArrayList();//第二个集合
  list1.add(6);
  list1.add(3);
  list1.add(0);
  set.addAll(list1);//将list放入set集合里面
  set.addAll(list2);
  for(Object obj:set)
   System.out.println(obj);
  
 
参考技术A 可以先将两个数组的元素放进HashSet集合里面。Set里面是不允许有重复元素的。再通过toArray()方法转集合为数组就行了。代码如下:public static void main(String[] args)
// TODO Auto-generated method stub
String[] strTemp1="abc","bcd","cde","def";
String[] strTemp2="bcd","aaa","ccc","def","bbb","eee";
HashSet<String> hs = new HashSet<String>();
for(String s:strTemp1)
hs.add(s);


for(String s:strTemp2)
hs.add(s);

Object[] obj = hs.toArray();
String[] strTemp = new String[obj.length];
for(int i = 0;i<strTemp.length;i++)
strTemp[i] = obj[i].toString();

for(String s:strTemp)
System.out.println(s);
参考技术B public class TestWenwen
public static void main(String arg[])
int[] arr = new int[]1,2,3,4,5,6,7;
int[] arr2 = new int[]5,6,7,8,9;
int[] arr3 = new int[arr.length+arr2.length];
System.arraycopy(arr, 0, arr3, 0, arr.length); //将arr中的元素copy到arr3中
int j=0;
for(int i=0;i<arr2.length;i++)
if(!arrayContains(arr, arr2[i]))
arr3[arr.length+(j++)] = arr2[i];


for(int i=0;i<arr3.length;i++)
System.out.println(arr3[i]);


/**
* 数组中是否有该元素
*
* @param a
* 数组
* @param b
* 元素
* @return
*/
public static boolean arrayContains(int[] a, int b)
if (a == null)
return false;

for (int i = 0; i < a.length; i++)
if (a[i] == b)
return true;


return false;


/**
* 数组中是否有该元素
*
* @param a
* 数组
* @param b
* 元素
* @return
*/
public static boolean arrayContains(String[] a, String b)
if (a == null)
return false;

for (int i = 0; i < a.length; i++)
if (a[i].equals(b))
return true;


return false;

以上是关于java set重复值是不存还是覆盖的主要内容,如果未能解决你的问题,请参考以下文章

java怎么判断集合中是不是存在重复数据,如果存在怎么删除重复数据

Java中的Map允许有重复元素吗

JAVA重复 new 会怎么样

合并两个数组,并且把相同的数值覆盖掉

java集合-set

java判断两个list是不是有重复元素