set集合可以添加重复元素

set集合判断元素的唯一性要重写hashcode和equals方法,这样就能保证不会加入重复的元素,

但是在以下这种情况下任然可以加入重复元素,即使他们的hashcode和equals方法结果相同

public static void main(String[] args) {
        Set<Person> set = new HashSet<Person>();
        Person p1 = new Person("p1",123);
        Person p2 = new Person("p2",123);
        Person p3 = new Person("p3",123);

        set.add(p1);
        set.add(p2);
        set.add(p3);

        Iterator<Person> it=  set.iterator();
        while(it.hasNext()){
            Person p = it.next();
            System.out.println(p.getName()+":"+p.getAge());
        }

        p3.setAge(20);
        set.remove(p3);
        set.add(p3);
        System.out.println("---------------------");
        it=  set.iterator();
        while(it.hasNext()){
            Person p = it.next();
            System.out.println(p.getName()+":"+p.getAge()+":"+p.hashCode());
        }

    }
class Person{
    private String name;
    private int age;
    public Person(){

    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    /**
     * 返回
     * @return
     */
    public String getName() {
        return name;
    }
    /**
     * 设置
     * @param
     */
    public void setName(String name) {
        this.name = name;
    }
    /**
     * 返回
     * @return
     */
    public int getAge() {
        return age;
    }
    /**
     * 设置
     * @param
     */
    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public int hashCode() {
        return this.age;
    }

    @Override
    public boolean equals(Object obj) {
        if(obj instanceof Person){
            Person p = (Person) obj;
            return p.getName().equals(this.getName());
        }
        return false;
    }

}

在修改set中元素属性值(hashcode值)在去删除这个元素时就删除不掉 因为它会根据修改之后的hashcode值去查找次对象,显然查找不到 删除失败,

在重新添加 此对象时  任然可以加入,虽然他们的hashcode和equals相同 但是他们存储在不同的位置

时间: 2024-10-20 22:07:42

set集合可以添加重复元素的相关文章

去除List集合中的重复元素? 如果没有Set集合,List集合是怎么去除重复元素的(字符串类型,自定义类型)?

 关键字: 如果没有Set集合,List集合是怎么去除重复元素的(字符串类型)?  *   *     思考: List就可以存储重复元素,那么需求中容器中的元素必须保证唯一性,该如何解决呢??  *      *   去除List集合中的重复元素?  * * 思路: * * 1.首先我需要另一个临时容器tempList,用来存放我认为应该保留的元素.(也就是不重复的元素) * 2.然后我们应该遍历原容器, 一个一个的取出元素, 放入tempList. * 当tempList里已经装有刚刚取出的

java集合 collection-list-ArrayList 去除ArrayList集合中的重复元素。

import java.util.*; /* 去除ArrayList集合中的重复元素. */ class ArrayListTest { public static void sop(Object obj) { System.out.println(obj); } public static void main(String[] args) { ArrayList al = new ArrayList(); al.add("java01"); al.add("java02&q

去掉集合中的重复元素

1 //去掉集合中额重复元素 2 //方法:选择排序的思想 3 4 public class ArrayListDemo1 { 5 6 public static void main(String[] args) { 7 8 ArrayList arrayList = new ArrayList(); 9 10 arrayList.add("hello"); 11 arrayList.add("hello"); 12 arrayList.add("java

Java 去除 ArrayList 集合中的重复元素

// One practice package Collection; import java.util.ArrayList; import java.util.Iterator; // 去除 ArrayList 集合中的重复元素 public class ArrayListTest { public static void sop(Object obj) { System.out.println(obj); } public static void main(String[] args) {

算法之去掉vetor集合中的重复元素

public class DropRepetition { public static void main(String[] args) { Vector<String> v = new Vector<String>(); v.add("1"); v.add("1"); v.add("2"); v.add("2"); v.add("3"); v.add("3");

如何去除List集合中的重复元素? a,b,c,a,c,b,d,,,,,,

package com.fs.test; import java.util.ArrayList; import java.util.List; public class Listdemo { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("a"); list.add("c"); list.add(&q

统计数组中重复元素个数

/** * 循环统计数组或集合中的重复元素个数 * @param args */ public static void main(String[] args) { Map<String, Integer> map = new HashMap<String, Integer>(); String[] ss = {"白","黑","绿","白"}; for (int i = 0; i < ss.len

萌新笔记——Cardinality Estimation算法学习(一)(了解基数计算的基本概念及回顾求字符串中不重复元素的个数的问题)

最近在菜鸟教程上自学redis.看到Redis HyperLogLog的时候,对"基数"以及其它一些没接触过(或者是忘了)的东西产生了好奇. 于是就去搜了"HyperLogLog",从而引出了Cardinality Estimation算法,以及学习它时参考的一些文章: http://blog.codinglabs.org/articles/algorithms-for-cardinality-estimation-part-i.html 从文章上看来,基数是指一个

iOS数组的去重,判空,删除元素,删除重复元素 等

一: 去重 有时需要将NSArray中去除重复的元素,而存在NSArray中的元素不一定都是NSString类型.今天想了想,加上朋友的帮助,想到两种解决办法,先分述如下. 1.利用NSDictionary的AllKeys(AllValues)方法 可以将NSArray中的元素存入一个字典,然后利用AllKeys或者AllValues取得字典的所有键或值,这些键或值都是去重的. 示例代码: NSArray *arr = @[@111,@222,@111]; NSMutableDictionary