У меня есть CSV-файл, который имеет хеш-карту, и всякий раз, когда пользователь вводит название города (ключ), он отображает все детали этого города.Я должен оптимизировать время поиска результатов, каждый раз, когда он читает файл (а не только один раз) и отображает значения.CSV-файлы содержат такие данные:
город, city_ascii, lat, lng, страна, iso2, iso3, admin_name, столица, население, id Malishevë, Malisheve, 42.4822,20.7458, Косово, XK,XKS, Malishevë, admin ,, 1901597212 Призрен, Призрен, 42.2139,20.7397, Косово, XK, XKS, Prizren, admin ,, 1901360309 Зубин Поток, Зубин Поток, 42.9144,20.6897, Косово, XK, XKS, Зубин Поток, администратор ,,1901608808
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;
import java.io.IOException;
public class CSVFileReaders{
public static void main(String[] args) {
String filePath = "C:\\worldcities1.csv";
Scanner in = new Scanner(System.in);
System.out.println(" \n Enter the City name to be Searched : \n _> ");
long start = System.currentTimeMillis();
String searchTerm = in.nextLine();
readAndFindRecordFromCSV(filePath, searchTerm);
long end = System.currentTimeMillis();
System.out.println(" \n It took " + (end - start) + " Milli Seconds to search the result \n");
in.close();
}
public static void readAndFindRecordFromCSV( String filePath, String searchTerm) {
try{
HashMap<String,ArrayList<String>> cityMap = new HashMap<String,ArrayList<String>>();
Scanner x = new Scanner (new File(filePath),"UTF-8");
String city= "";
while(x.hasNextLine()) {
ArrayList<String> values = new ArrayList<String>();
String name = x.nextLine();
//break each line of the csv file to its elements
String[] line = name.split(",");
city = line[1];
for(int i=0;i<line.length;i++){
values.add(line[i]);
}
cityMap.put(city,values);
}
x.close();
//Search the city
if(cityMap.containsKey(searchTerm)) {
System.out.println("City name is : "+searchTerm+"\nCity details are accordingly in the order :"
+ "\n[city , city_ascii , lat , lng , country , iso2 , iso3 , admin_name , capital , population , id] \n"
+cityMap.get(searchTerm)+"");
}
else {
System.out.println("Enter the correct City name");
}
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} `
время должно быть оптимизировано, и каждый раз, когда я ищу, он читает весь файл (что должно произойти)