HashSet或LinkedHashSet不使用迭代器能删除里面的对象吗?

RookieJP 2010-11-24 12:51:45
在不使用迭代器的情况下能删除存在集合内的对象吗?
如:Set set=new HashSet();使用set.remove();删除对象,而不使用iter.remove()。



import java.util.*;

public class TestSet {

public static void main(String[] args) {
Person p1 = new Person(1, "per1", "male");
Person p2 = new Person(2, "per2", "male");
Person p3 = new Person(3, "per3", "male");
Person p4 = new Person(4, "per4", "male");
Person p5 = new Person(5, "per5", "male");
Person removePerson = new Person(4, null, null);
Set set = new HashSet();
set.add(p1);
set.add(p2);
set.add(p3);
set.add(p4);
set.add(p5);
Iterator iter = set.iterator();
System.out.println("利用集合的remove():方法删除:");

System.out.println("利用迭代器的remove()方法删除:");
Iterator iter2=set.iterator();
while (iter2.hasNext()) {
Person person = (Person) iter2.next();
if (person.equals(removePerson)) {
iter2.remove();
}
}
System.out.println(set);
System.out.println(set.size());
}
}

class Person {
int id;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

String name, sex;

public Person(int id, String name, String sex) {
this.id = id;
this.name = name;
this.sex = sex;
}

@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", sex=" + sex + "]";
}

public boolean equals(Object obj) {
if (obj == null) {
return false;
}

if (obj instanceof Person) {
Person tempPerson = (Person) obj;
if (this.id == tempPerson.id) {
return true;
}
}
return false;

}

public int hashCode() {
return this.name.hashCode();
}

}
...全文
347 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
plusplus2010 2010-11-24
  • 打赏
  • 举报
回复

删除单个:
set.remove(p1);


全删:
set.clear();
RookieJP 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dr_lou 的回复:]
引用 2 楼 rookiejp 的回复:
我这问的是怎么在不使用迭代器的情况下找到和removePerson的Id相同的对象,然后使用set.remove()方法删除?



Java code
package com.xuz.csdn.nov24;

import java.util.HashSet;
import java.util.Set;

public class ……
[/Quote]
string 能这么删,如果set内存的是对象呢?
RookieJP 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dr_lou 的回复:]
引用 2 楼 rookiejp 的回复:
我这问的是怎么在不使用迭代器的情况下找到和removePerson的Id相同的对象,然后使用set.remove()方法删除?


没仔细看,按id批量删除么?
[/Quote]
在set集合中删除Id与removePeron相同的对象...
RookieJP 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tsjguaiguai 的回复:]
Iterator iter2=set.iterator();
while (iter2.hasNext()) {
Person person = (Person) iter2.next();
if (person.equals(removePerson)) {
set.remove(person);
}
}
[/Quote]
这种方法不行,如果将removePerson的Id改为其他数的话会出现快速失败异常。
dr_lou 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 rookiejp 的回复:]
我这问的是怎么在不使用迭代器的情况下找到和removePerson的Id相同的对象,然后使用set.remove()方法删除?
[/Quote]

没仔细看,按id批量删除么?
dr_lou 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 rookiejp 的回复:]
我这问的是怎么在不使用迭代器的情况下找到和removePerson的Id相同的对象,然后使用set.remove()方法删除?
[/Quote]

package com.xuz.csdn.nov24;

import java.util.HashSet;
import java.util.Set;

public class SetRemove {

public static void main(String[] args) {
Set<String> set = new HashSet<String>();
set.add("5");
set.add("2");
set.add("4");
set.add("1");

set.remove("5");

System.out.println(set);
}

}
dr_lou 2010-11-24
  • 打赏
  • 举报
回复
迭代器里不能删除操作的。
tsjguaiguai 2010-11-24
  • 打赏
  • 举报
回复
Iterator iter2=set.iterator();
while (iter2.hasNext()) {
Person person = (Person) iter2.next();
if (person.equals(removePerson)) {
set.remove(person);
}
}
RookieJP 2010-11-24
  • 打赏
  • 举报
回复
这里使用迭代器后再使用set.remove()方法会出现快速失败异常....
RookieJP 2010-11-24
  • 打赏
  • 举报
回复
我这问的是怎么在不使用迭代器的情况下找到和removePerson的Id相同的对象,然后使用set.remove()方法删除?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧