输出的为什么是地址而不是具体的数呢还有remove()方法怎么就没起作用啊
package 第十三章.容器;
import java.util.*;public class User{
String name; public User(String name) {
this.name = name;
}
}package 第十三章.容器;import java.util.HashSet;
import java.util.Iterator;public class UserManager { public static void main(String[] args) {
HashSet hs=new HashSet<User>();
hs.add(new User("Jim"));
hs.add(new User("Tom"));
hs.remove("Jim");//
hs.contains(new User("Tom"));
Iterator it=hs.iterator();
while(it.hasNext())
{
System.out.println(it.next()+" "); }
}}
package 第十三章.容器;
import java.util.*;public class User{
String name; public User(String name) {
this.name = name;
}
}package 第十三章.容器;import java.util.HashSet;
import java.util.Iterator;public class UserManager { public static void main(String[] args) {
HashSet hs=new HashSet<User>();
hs.add(new User("Jim"));
hs.add(new User("Tom"));
hs.remove("Jim");//
hs.contains(new User("Tom"));
Iterator it=hs.iterator();
while(it.hasNext())
{
System.out.println(it.next()+" "); }
}}
所以返回的是Object。
你在HashMap中remove方面是移除指定建的映射关系在如果有得前提下。
你添加的是一个User对象的话用Vector吧或者是list吧HashMap是键值对的关系、
import java.util.*;public class User{
String name; public User(String name) {
this.name = name;
} //重写hashcode
public int hashcode(){
return name.hashcode();
}
}package 第十三章.容器;import java.util.HashSet;
import java.util.Iterator;public class UserManager { public static void main(String[] args) {
HashSet hs=new HashSet<User>();
hs.add(new User("Jim"));
hs.add(new User("Tom"));
//修改
hs.remove(new User("Jim"));
hs.remove("Jim");//
hs.contains(new User("Tom"));
Iterator it=hs.iterator();
while(it.hasNext())
{
System.out.println(it.next()+" "); }
}}
package com.csdn.www.Set;import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Test {
public static void main(String[] args){
Set<User> set = new HashSet<User>();
set.add(new User("Jim"));
set.add(new User("Tom"));
if(set.contains( new User("Jim"))){
set.remove(new User("Jim"));
System.out.println("remove Jim ...");
}
Iterator<User> iterator = set.iterator();
while(iterator.hasNext()){
System.out.println("name : " + iterator.next().getName()
+ System.getProperty("line.separator"));
}
}
}class User {
private String name;
public String getName() {
return name;
} User(String name){this.name = name;} @Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
} @Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
需要重写hashCode 和 equals方法的!
@Override
public boolean equals(Object obj) {
这两个方法都要重写。
一个自定义的类直接输出 应该是类名@地址.
而重写equals()和hashCode()方法 是因为 你的集合是Set 不准添加相同的元素
判断两个元素是否相等的标准就是比较equals()方法. 而没有重写的话就直接用Object的equals()方法
什么时候要重写 在Map 里 当索引是对象的时候重写.用hashCode比较 省事
要是说错了 请指出... 谢谢!
所以返回的是Object。