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 秒)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值