HashMap保持返回null值没有明显的原因

时间:2014-11-08 02:45:49

标签: java hashmap key-value-store

我有一个哈希映射和一个ArrayList。它们都填充了,因为我试图将它们打印出来并且工作正常。 arrayList包含MeterNumbers(MeterNumber是HashMap的关键)。该映射包含键的MeterNumbers和值的String。

我希望能够做的是,给定MetelNumber键从hasMap获取String值,我将从ArrayList中提供。我认为我不需要检查它是否存在因为我知道它确实存在。我已尽力获取值,但它一直给我空值。这是我的代码。

import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;


public class Try {  
    static Map <MeterNumber, String> map2 = new HashMap <MeterNumber, String>();
    static ArrayList<MeterNumber> blackOutMeters = new ArrayList<MeterNumber>();

    public static void main (String args[]) {

        try {
            Scanner sc2 = new Scanner(new java.io.File("meters.txt"));
            Scanner sc3 = new Scanner(new java.io.File("outages.txt")); 
            while (sc2.hasNextLine()) {
                String transformerId;
                MeterNumber meterId;                
                String line = sc2.nextLine();
                String[] array = line.split(" ");               
                if (array.length>3){
                    transformerId = array[3];
                    meterId = MeterNumber.fromString(array [0] + array [1] + array [2]);
                    map2.put(meterId, transformerId);                   
                }
            }
    //      System.out.println (map2.values());
            while (sc3.hasNextLine()) {
                MeterNumber meterId;                
                String line = sc3.nextLine();
                String[] array = line.split(" ");               
                if (array.length>2){                
                    meterId = MeterNumber.fromString(array [0] + array [1] + array [2]);        
                    blackOutMeters.add(meterId);                                                    
                }               
            }

        for (int i = 0; i <blackOutMeters.size(); i++){

            String s = map2.get(blackOutMeters.get(i));
            System.out.println (s);

        }


} 
        catch (FileNotFoundException e) {

            e.printStackTrace();
        }
    }}
meter.txt的

文件格式为:

900 791 330 T1
379 165 846 T1
791 995 073 T1
342 138 557 T1
114 125 972 T1
970 324 636 T1
133 997 798 T1
308 684 630 T1
169 329 493 T1
540 085 209 T1
265 229 117 T1
970 173 664 T1
264 943 573 T1
462 043 136 T1
087 307 071 T1
001 343 243 T1

outages.txt的文件格式为:

900 791 330 
379 165 846 
791 995 073 
342 138 557 
114 125 972 
970 324 636 
133 997 798 

提前谢谢。

1 个答案:

答案 0 :(得分:4)

您需要为hashCode

实施equalsMeterNumber

否则Java无法知道如何比较对象