自定义类做为hashmap键值

我自定义了一个类,并且也重载了hascode()publicclassStructWord{publicStringunlistedword;publicStringno... 我自定义了一个类,并且也重载了hascode()
public class StructWord {
public String unlistedword;
public String notstopword;
StructWord(String word1,String word2){
unlistedword=word1;
notstopword=word2;
}
public int hascode(){
return unlistedword.hashCode()+notstopword.hashCode();
}
}
然后我想遍历并输出这个hashmap
HashMap<StructWord,Integer> temp=new HashMap<StructWord,Integer>();
Iterator ite = temp.entrySet().iterator();
temp.put(new StructWord("e","gh"), 1);
temp.put(new StructWord("c","cd"), 1);
temp.put(new StructWord("b","cd"), 1);
temp.put(new StructWord("d","of"), 1);
while(ite.hasNext()){
Map.Entry entry = (Map.Entry) ite.next();
Object key=entry.getKey();
System.out.println(key.tostring());

}
为什么报错了呢?返回的key的类型应该是StructWord,但是写StructWord就报错,而且最后也无法返回key.unlistedword,一写就报错。那我想要遍历输出StructWord结构中的unlistedword,要怎么写呢?
我自己已经解决,给后来人:
Iterator ite = temp.entrySet().iterator(); 在temp.put之后
key需要强制类型转换为StructWord
展开
 我来答
精灵只路过
推荐于2016-01-15 · TA获得超过2144个赞
知道小有建树答主
回答量:619
采纳率:100%
帮助的人:659万
展开全部

最后的打印语句key.tostring()修改为key.toString()

前面的

Iterator ite = temp.entrySet().iterator();
temp.put(new StructWord("e","gh"), 1);
temp.put(new StructWord("c","cd"), 1);
temp.put(new StructWord("b","cd"), 1);
temp.put(new StructWord("d","of"), 1);

语句当中应该把

Iterator ite = temp.entrySet().iterator(); 

这句放到temp.put后面,调整为。

temp.put(new StructWord("e","gh"), 1);
temp.put(new StructWord("c","cd"), 1);
temp.put(new StructWord("b","cd"), 1);
temp.put(new StructWord("d","of"), 1);

Iterator ite = temp.entrySet().iterator(); 


修改后的代码如下:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class StructWord {
public String unlistedword;
public String notstopword;

StructWord(String word1, String word2) {
unlistedword = word1;
notstopword = word2;
}

public int hascode() {
return unlistedword.hashCode() + notstopword.hashCode();
}

public static void main(String[] args) {
HashMap<StructWord,Integer> temp=new  HashMap<StructWord,Integer>();
temp.put(new StructWord("e","gh"), 1);
temp.put(new StructWord("c","cd"), 1);
temp.put(new StructWord("b","cd"), 1);
temp.put(new StructWord("d","of"), 1);

Iterator<?> ite = temp.entrySet().iterator(); 

while(ite.hasNext()){
Map.Entry entry = (Map.Entry) ite.next();
Object key=entry.getKey();
System.out.println(key.toString());

}
}
}
追问
但是这样的话,只能输出
StructWord@fe0ce1
StructWord@ed3bff
StructWord@1e534cb
StructWord@ac8360
是object key的地址吧?怎么才能把key中2个String:unlistedword和notstopword输出来?
追答

你需要重写toString方法,否则将只能打印地址。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class StructWord {
public String unlistedword;
public String notstopword;

StructWord(String word1, String word2) {
unlistedword = word1;
notstopword = word2;
}

public int hascode() {
return unlistedword.hashCode() + notstopword.hashCode();
}
public String toString() {
return "unlistedword: " + unlistedword + "   notstopword:" + notstopword;
}

public static void main(String[] args) {
HashMap<StructWord,Integer> temp=new  HashMap<StructWord,Integer>();
temp.put(new StructWord("e","gh"), 1);
temp.put(new StructWord("c","cd"), 1);
temp.put(new StructWord("b","cd"), 1);
temp.put(new StructWord("d","of"), 1);

Iterator<?> ite = temp.entrySet().iterator(); 

while(ite.hasNext()){
Map.Entry entry = (Map.Entry) ite.next();
Object key=entry.getKey();
System.out.println(key.toString());
}
}
}
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式