求助: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 秒)
分享到:
相关推荐
- boolean contains(Object o):检查HashSet中是否存在指定的元素,如果存在则返回true。 - boolean isEmpty():检查HashSet是否为空,空返回true。 - Iterator iterator():返回一个迭代器,用于遍历HashSet中的...
HashSet提供了多种操作方法,如add()用于添加元素,remove()用于删除元素,contains()用于检查元素是否存在,size()返回集合中元素的数量,isEmpty()判断集合是否为空。此外,HashSet还支持迭代器(Iterator),允许...
HashSet的主要操作,如添加元素(add)、删除元素(remove)、检查元素是否存在(contains)等,都直接委托给了HashMap。例如,`add()`方法实质上是调用了HashMap的`put()`方法,如果元素不在HashSet中,`put()`会...
- **查询元素**:contains方法通过哈希码快速定位元素,如果找到则返回true,否则返回false。 - **其他方法**:addAll、retainAll、removeAll和clear等方法都是通过HashMap的相应方法来实现的,以保持元素唯一性。 ...
4. HashSet的其他方法:HashSet的其他方法,如contains、remove、size等,都是通过调用HashMap的对应方法来实现的。 5. HashSet的实现机理:HashSet的实现机理可以总结为:HashSet是基于HashMap实现的,HashSet的...
Java HashSet 详解 Java HashSet 是 Java 集合框架中的一种重要数据结构,它提供了一个不允许有重复元素的集合。HashSet 是基于 HashMap 实现的,它允许有 null 值,但不记录插入的顺序,也不是线程安全的。 ...
2. **判断元素存在**:使用 `contains()` 方法检查给定的对象是否存在于 `HashSet` 中,返回 `true` 或 `false`。 3. **删除元素**:使用 `remove()` 方法删除指定元素。如果元素存在,返回 `true`,否则返回 `false...
如果列表中存在与传入元素相等的实例,`Contains()` 方法将返回 `true`,否则返回 `false`。相等性是基于默认的 `Object.Equals()` 方法,或者是自定义的 `IEqualityComparer<T>` 实现。对于自定义类型,如果你希望...
3. **集合操作**:在实现CRUD操作时,会用到HashSet的一些核心方法,例如add()、remove()、contains()等。这些方法都是O(1)的时间复杂度,因为HashSet依赖于哈希表,查找和添加元素的速度非常快。 4. **面向对象...
- `boolean contains(Object obj)`:判断集合中是否包含指定的元素`obj`,如果包含,则返回`true`。 - `boolean isEmpty()`:判断集合是否为空,如果集合中没有元素,则返回`true`。 - `Iterator iterator()`:...
contains方法返回布尔值,如果列表包含指定的元素,则返回true,否则返回false。 4. **clear与addAll方法**:遍历完成后,原始列表list的所有元素被移除(通过调用clear方法),然后将uniqueList的所有元素添加回...
它提供了add、remove和contains等基本操作。 3. List接口: List接口继承自Collection,它代表有序的元素集合,允许有重复元素。List接口的重要实现类有ArrayList和LinkedList。 4. Set接口: Set接口同样继承自...
- `contains(Object o)`:判断集合中是否包含指定元素,如果包含则返回true,否则返回false。 - `size()`:返回集合中元素的数量。 - `isEmpty()`:检查集合是否为空。 - `clear()`:清除集合中的所有元素。 - `...
Set接口的通用操作包括添加元素(`add()`)、删除元素(`remove()`)、检查元素是否存在(`contains()`)以及获取集合大小(`size()`)等。由于Set接口不保证元素的顺序,因此不适合那些依赖于元素特定顺序的应用场景。 在...
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 ...
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 ...
set.contains(c)) { set.add(c); result.append(c); } } return result.toString(); } ``` 在这个方法中,我们首先创建一个空的HashSet,然后遍历字符串的每个字符。如果字符不在集合中,我们就将其添加到集合...
HashSet<String> unprocessedUrls = new HashSet();unprocessedUrls.add(startUrl);int urlCount = 0;while (unprocessedUrls.size() > 0 && urlCount ) {String currentUrl = unprocessedUrls.iterator().next();...
* boolean contains(Object o) 如果列表包含指定的元素,则返回 true * boolean isEmpty() 如果列表不包含元素,则返回 true * int size() 返回列表中的元素数 * Iterator iterator() 返回以正确顺序在列表的元素上...