0

跟进我的问题:当键是对象时如何访问哈希映射键

我想尝试这样的事情:webSearchHash.put(xfile.getPageTitle(i),outlinks.put(keyphrase.get(i), xfile.getOutLinks(i)));

想知道为什么我的钥匙是null

这是我的代码:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

import readFile.*;

public class WebSearch {

    readFile.ReadFile xfile = new readFile.ReadFile("inputgraph.txt");
    HashMap webSearchHash = new HashMap();
    ArrayList belongsTo = new ArrayList();
    ArrayList keyphrase = new ArrayList();

    public WebSearch() {        
    }

    public void createGraph()
    {
        HashMap <Object, ArrayList<Integer> > outlinks = new HashMap <Object, ArrayList<Integer>>();
        for (int i = 0; i < xfile.getNumberOfWebpages(); i++ )
        {
            keyphrase.add(i,xfile.getKeyPhrases(i));
            webSearchHash.put(xfile.getPageTitle(i),outlinks.put(keyphrase.get(i), xfile.getOutLinks(i)));
        }
    }
}

当我做System.out.print(webSearchHash);的输出是{Star-Ledger=null, Apple=null, Microsoft=null, Intel=null, Rutgers=null, Targum=null, Wikipedia=null, New York Times=null}

但是System.out.print(outlinks);给了我:{[education, news, internet]=[0, 3], [power, news]=[1, 4], [computer, internet, device, ipod]=[2]}基本上我希望哈希图成为我的键的值

4

3 回答 3

2

您真的不应该使用HashMap(或任何可变对象)作为您的密钥,因为它会破坏您的Map. 根据您打算完成的任务,可能会有许多有用的方法和库,但是使用不稳定的对象作为Map键是自找麻烦。

于 2013-08-01T03:57:45.593 回答
0

所以我想我只是这样做,这正是我想要的:

for (int i = 0; i < xfile.getNumberOfWebpages(); i++ )
    {
        HashMap <Object, ArrayList<Integer> > outlinks = new HashMap <Object, ArrayList<Integer>>();
        keyphrase.add(i,xfile.getKeyPhrases(i));
        outlinks.put(keyphrase.get(i), xfile.getOutLinks(i));
        webSearchHash.put(xfile.getPageTitle(i), outlinks);

    }
于 2013-08-01T04:13:07.780 回答
0

您的问题是您在此语句中输入 null

 webSearchHash.put(xfile.getPageTitle(i),outlinks.put(keyphrase.get(i), xfile.getOutLinks(i)));

让我们分解一下。看跌期权的形式

map.put(key,value)

所以对于你的钥匙,你有getPageTitle(i)。这很好

对于您的价值,您的返回值为

outlinks.put(keyphrase.get(i), xfile.getOutLinks(i))

根据 javadoc,hashmap put 返回与此键关联的先前值(在本例中为 keyphrase.get(i)),如果先前没有与之关联的值,则返回 null。

由于之前没有任何内容与您的密钥相关联,因此它返回 null。

所以你的陈述实际上是在说

webSearchHash.put(xfile.getPageTitle(i),null);

http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html#put(K , V)

于 2013-08-01T04:18:45.037 回答