java的set集合中元素允许重复,

  java的set集合中元素允许重复,

  

目录

设置接口哈希集

 

  

Set接口

集合接口和列表接口一样,继承了集合接口。Set接口中的元素是无序的,使用一些规则来确保存储的元素不会出现重复。

 

  

HashSet集合

HashSet是Set接口的实现类。存储的元素是不可重复的,而且都是无序的。当一个对象被添加到HashSet中时,首先会调用该对象的hashCode()方法来计算该对象的hash值,从而确定该元素的存储位置。如果哈希值相同,则调用对象的equals()方法,以确保在此位置没有重复的元素。

 

  包类;导入Java . util . hashset;导入Java . util . iterator;public class Set { public static void main(String[]args){ HashSet Set=new HashSet();set . add( hello );set . add( world );set . add( ABC );set . add( hello );迭代器it=set . iterator();while(it . has next()){ Object obj=it . next();system . out . print(obj );}}}运行结果

  从运行结果可以看出,取出元素的顺序与添加元素的顺序并不一致,重复的字符串只被删除和添加一次,因为HashSet集合的add()方法在存储元素时,首先调用当前存储对象的hashCode()方法获取对象的哈希值,然后根据哈希值计算一个存储位置。如果这个位置没有元素,就直接存储元素,如果这个位置有元素,就调用equal。如果返回结果为false,则该元素将存储在集合中;如果返回结果为真,则意味着存在重复的元素,该元素将被丢弃。

  包类;导入Java . util . hashset;班级学生{字符串id;字符串名称;public Student(String id,String name){ this . id=id;this.name=name} public String toString(){ String s=id : name;返回s;} } public class set 1 { public static void main(String[]args){ HashSet hs=new HashSet();Student stu1=新生( 1 , hello );学生stu2=新生( 2 ,世界);Student stu3=新生( 1 , hello );hs . add(stu 1);hs . add(stu 2);hs . add(stu 3);system . out . println(hs);}}运行结果

  重复的元素没有被删除,因为hashCode()和equals()方法在定义Student类时没有被覆盖。

  包API导入Java . util . hashset;class Student{私有字符串id;私有字符串名称;public Student(String id,String name){ this . id=id;this.name=name}//重写toString方法publicstring toString(){ return id 3360 name;}//覆盖hashCode方法public int hashCode(){ //返回id属性的哈希值返回id . hashCode();} public boolean equals(object obj){//判断是否为同一对象if(this==obj){ return true;}//判断对象是学生类型if(!(obj instanceof Student)){返回false}//将对象强制为学生类型stu=(Student)obj;//判断id是否相同boolean b=this . id . equals(stu . id);返回b;} } public class set 2 { public static void main(String[]args){ HashSet hs=new HashSet();Student stu1=新生( 1 , hello );学生stu2=新生( 2 ,世界);Student stu3=新生( 1 , hello );hs . add(stu 1);hs . add(stu 2);hs . add(stu 3);system . out . println(hs);}}运行结果

  因为Student类覆盖了Object类的hashCode()和equals()方法。hashCode()方法中返回id属性的哈希值,equals()方法中比较对象的id属性是否相等并返回结果。当调用HashSet集合的add()方法添加stu3对象时,发现其哈希值与stu2对象的哈希值相同,stu2.equals(stu3)返回true。HashSet确定这两个对象是相同的,因此删除了重复的Student对象。

  关于Java如何使用Set接口存储没有重复元素的数组的文章到此结束。有关Java Set接口的更多信息,请搜索以前关于流行IT的文章或继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: