`
DataBird
  • 浏览: 71704 次
  • 性别: Icon_minigender_1
  • 来自: 湖南长沙
社区版块
存档分类
最新评论

HashSet remove 报错 contains true

阅读更多
求助:HashSet 包含某Object=true,但是remove该Object就报错。Object RecordNumber重写了toString hashCode equals 方法。估计是这里有问题,请教各位大侠。

import java.text.ParseException;
import java.util.Date;
//数据源 表名 时间 (记录数量)
public class RecordNumber {
    public final static int CSUDF_SYS_CELL_HOUR_G = (int) 0;
    public final static int CSUDF_SYS_RTF_HOUR_G = (int) 1;
    public final static int CSUDF_SYS_GPROC_HOUR_G = (int) 2;
    private String OMC;
    private String TableName;
    private Date DateTime;
    public RecordNumber(String DataSource, String TableName, Date DateTime) {
        this.OMC = DataSource;
        this.TableName = TableName;
        this.DateTime = DateTime;
    }
    public String getOMC() {
        return this.OMC;
    }
    public String getTableName() {
        return this.TableName;
    }
    public Date getDateTime() {
        return this.DateTime;
    }
    public int getTableNameInt() {
        int x = 1000;
        if (TableName.equals("CSUDF_SYS_CELL_HOUR_G")) {
            x = (int) CSUDF_SYS_CELL_HOUR_G;
        }
        if (TableName.equals("CSUDF_SYS_RTF_HOUR_G")) {
            x = CSUDF_SYS_RTF_HOUR_G;
        }
        if (TableName.equals("CSUDF_SYS_GPROC_HOUR_G")) {
            x = CSUDF_SYS_GPROC_HOUR_G;
        }
        return x;
    }
    @Override
    public String toString() {
        return (this.OMC + "," + this.TableName + "," + this.DateTime);
    }
    @Override
    public boolean equals(Object o) {
        return (o instanceof RecordNumber)
                && toString().equals(((RecordNumber) o).toString());
    }
    @Override
    public int hashCode() {
        int hash = 7;
        hash = 37 * hash + (this.OMC != null ? this.OMC.hashCode() : 0);
        hash = 37 * hash + (this.TableName != null ? this.TableName.hashCode() : 0);
        hash = 37 * hash + (this.DateTime != null ? this.DateTime.hashCode() : 0);
        return hash;
    }
    //单元测试
    public static void main(String[] args) throws ParseException {
        java.text.DateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm");
        RecordNumber rn = new RecordNumber("OMCSP9", "CSUDF_SYS_CELL_HOUR_G", df.parse("2010-10-26 07:00"));
        java.util.Set<RecordNumber> testSet = new java.util.LinkedHashSet<RecordNumber>();
        testSet.add(rn);
        rn = new RecordNumber("OMCSP1", "CSUDF_SYS_CELL_HOUR_G", df.parse("2010-10-26 07:00"));
        testSet.add(rn);
        rn = new RecordNumber("OMCSP11", "CSUDF_SYS_CELL_HOUR_G", df.parse("2010-10-26 07:00"));
        testSet.add(rn);
        System.out.println(testSet.size());
        for (RecordNumber x : testSet) {
            System.out.println(x);
            System.out.println("testSet包含该RecordNumber:" + testSet.contains(x));
            testSet.remove(x);
            System.out.println(testSet.size());
        }
    }
}




run:
3
OMCSP9,CSUDF_SYS_CELL_HOUR_G,Tue Oct 26 07:00:00 CST 2010
testSet包含该RecordNumber:true
2
Exception in thread "main" java.util.ConcurrentModificationException
        at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:373)
        at java.util.LinkedHashMap$KeyIterator.next(LinkedHashMap.java:384)
        at datatransfer.RecordNumber.main(RecordNumber.java:79)
Java Result: 1
成功生成(总时间:0 秒)
分享到:
评论
1 楼 DataBird 2010-11-07  
使用迭代器可以顺利删除。至于为什么就懒得管了。
  Iterator<RecordNumber> it = testSet.iterator();
        while (it.hasNext()) {...  it.remove();  ...}

相关推荐

    hashset类的使用

    - boolean contains(Object o):检查HashSet中是否存在指定的元素,如果存在则返回true。 - boolean isEmpty():检查HashSet是否为空,空返回true。 - Iterator iterator():返回一个迭代器,用于遍历HashSet中的...

    集合类HashSet

    HashSet提供了多种操作方法,如add()用于添加元素,remove()用于删除元素,contains()用于检查元素是否存在,size()返回集合中元素的数量,isEmpty()判断集合是否为空。此外,HashSet还支持迭代器(Iterator),允许...

    Java中HashSet的解读_.docx

    HashSet的主要操作,如添加元素(add)、删除元素(remove)、检查元素是否存在(contains)等,都直接委托给了HashMap。例如,`add()`方法实质上是调用了HashMap的`put()`方法,如果元素不在HashSet中,`put()`会...

    ThinkinginJava之Set接口、HashSet源码学习.pdf

    - **查询元素**:contains方法通过哈希码快速定位元素,如果找到则返回true,否则返回false。 - **其他方法**:addAll、retainAll、removeAll和clear等方法都是通过HashMap的相应方法来实现的,以保持元素唯一性。 ...

    Java面试题 从源码角度分析HashSet实现原理

    4. HashSet的其他方法:HashSet的其他方法,如contains、remove、size等,都是通过调用HashMap的对应方法来实现的。 5. HashSet的实现机理:HashSet的实现机理可以总结为:HashSet是基于HashMap实现的,HashSet的...

    实例讲解Java HashSet

    Java HashSet 详解 Java HashSet 是 Java 集合框架中的一种重要数据结构,它提供了一个不允许有重复元素的集合。HashSet 是基于 HashMap 实现的,它允许有 null 值,但不记录插入的顺序,也不是线程安全的。 ...

    Java HashSet

    2. **判断元素存在**:使用 `contains()` 方法检查给定的对象是否存在于 `HashSet` 中,返回 `true` 或 `false`。 3. **删除元素**:使用 `remove()` 方法删除指定元素。如果元素存在,返回 `true`,否则返回 `false...

    C# 有关List&lt;T&gt;的Contains与Equals方法.doc

    如果列表中存在与传入元素相等的实例,`Contains()` 方法将返回 `true`,否则返回 `false`。相等性是基于默认的 `Object.Equals()` 方法,或者是自定义的 `IEqualityComparer&lt;T&gt;` 实现。对于自定义类型,如果你希望...

    java学生管理系统_set

    3. **集合操作**:在实现CRUD操作时,会用到HashSet的一些核心方法,例如add()、remove()、contains()等。这些方法都是O(1)的时间复杂度,因为HashSet依赖于哈希表,查找和添加元素的速度非常快。 4. **面向对象...

    Java集合框架,来自个人参考其他资源学习的笔记1

    - `boolean contains(Object obj)`:判断集合中是否包含指定的元素`obj`,如果包含,则返回`true`。 - `boolean isEmpty()`:判断集合是否为空,如果集合中没有元素,则返回`true`。 - `Iterator iterator()`:...

    顺序表删除重复元素java.docx

    contains方法返回布尔值,如果列表包含指定的元素,则返回true,否则返回false。 4. **clear与addAll方法**:遍历完成后,原始列表list的所有元素被移除(通过调用clear方法),然后将uniqueList的所有元素添加回...

    java&c++概念及面试常问问题及解答

    它提供了add、remove和contains等基本操作。 3. List接口: List接口继承自Collection,它代表有序的元素集合,允许有重复元素。List接口的重要实现类有ArrayList和LinkedList。 4. Set接口: Set接口同样继承自...

    Java集合框架Set接口.pdf

    - `contains(Object o)`:判断集合中是否包含指定元素,如果包含则返回true,否则返回false。 - `size()`:返回集合中元素的数量。 - `isEmpty()`:检查集合是否为空。 - `clear()`:清除集合中的所有元素。 - `...

    java中set接口使用方法详解

    Set接口的通用操作包括添加元素(`add()`)、删除元素(`remove()`)、检查元素是否存在(`contains()`)以及获取集合大小(`size()`)等。由于Set接口不保证元素的顺序,因此不适合那些依赖于元素特定顺序的应用场景。 在...

    hash table spell checking

    Class HashSet provide three functions to handle the hashset, search, insert, remove, which accept a single reference of key_type as a parameter.  Search function: This function searches the key ...

    数据结构作业Hash表

    Class HashSet provide three functions to handle the hashset, search, insert, remove, which accept a single reference of key_type as a parameter.  Search function: This function searches the key ...

    java 去掉重复字符 三个方法

    set.contains(c)) { set.add(c); result.append(c); } } return result.toString(); } ``` 在这个方法中,我们首先创建一个空的HashSet,然后遍历字符串的每个字符。如果字符不在集合中,我们就将其添加到集合...

    一个WEB爬虫的实例——JAVA.pdf

    HashSet&lt;String&gt; unprocessedUrls = new HashSet();unprocessedUrls.add(startUrl);int urlCount = 0;while (unprocessedUrls.size() &gt; 0 && urlCount ) {String currentUrl = unprocessedUrls.iterator().next();...

    JAVA中常用的集合类型

    * boolean contains(Object o) 如果列表包含指定的元素,则返回 true * boolean isEmpty() 如果列表不包含元素,则返回 true * int size() 返回列表中的元素数 * Iterator iterator() 返回以正确顺序在列表的元素上...

Global site tag (gtag.js) - Google Analytics