【发布时间】:2015-06-23 23:37:55
【问题描述】:
HashMap的Keys如何与String比较?
我有一个包含 100k 行的文本文件并将其放入 HashMap。
例如,我的 HashMap 如下所示:
{test1=1}
{test2=2}
up to...
{test100000=100000}
另一方面,我正在读取 100 万行的文本文件。 文本文件有这样的数据:
test1,first,input1
test2,second,input2
up to..
test1000000,1million,input1million
我用“,”将它分成一行,我只是得到该行的第一个数据。例如“测试词”:
test1
test2
所以我想做的是,我想检查我的 HashMap 的键是否存在于文本文件中。
我的问题是,我的其他文本文件比 HashMap 的行大,所以它可能会抛出 NullPointerException 或 NoSuchElement。
这是我的代码:
public static void main(String[] args) {
File small = new File("C:\test\\testfolder\\small.txt"); // text file (100k+lines) put in hashmap
File large = new File("C:\test\\testfolder\\big.txt"); // text file (1million+ lines) just read
ArrayList<String> smallData= new ArrayList();
smallData.addAll(getData(small));
Map<String,String> smallMap = new HashMap();
smallMap = MapSmallFile(smallData);
try{
LineIterator it = FileUtils.lineIterator(large,"UTF-8");
String line;
String[] large_data;
while(it.hasNext()){
line = it.nextLine();
large_data = StringUtils.split(line, (","));
//do the comparing here
if(large_data[0].equalsIgnoreCase(?????)
}
}
catch(Exception ex){
ex.printStackTrace();
}
}
private static ArrayList<String> getData(File file) {
ArrayList<String> data = new ArrayList();
String line;
try{
LineIterator it = FileUtils.lineIterator(file,"UTF-8");
while(it.hasNext()){
line = it.nextLine();
data.add(line);
}
it.close();
}
catch(Exception e){
e.printStackTrace();
}
return data;
}
private static Map<String,String> MapSmallFile(ArrayList<String> inputlist){
String[] data;
Map<String,String> hashmap = new HashMap<String,String>();
for(int i=0; i<inputlist.size(); i++){
data = inputlist.get(i).split(",");
hashmap.put(data[0], data[1]);
}
return hashmap;
}
【问题讨论】:
-
Hash map get方法在key不存在时不抛出异常,返回值为null。
-
但问题是,我如何检查密钥是否存在于行中?
-
@tutuyokgaming 你可以使用
HashMap.keySet(),它返回一个List<K>,并使用List.contains来检查。 -
@M.Shaw 但按照这种逻辑,我只是在检查列表中的数据是否与行中的数据相同。但我想要的是比较
的列表是否存在于行数据中。