로그가있는 두 개의 파일 (각각 거의 5000 줄)이 있습니다.HashTable에서 여러 검색을 빠르게하는 방법
Y#12#EMAIL_1#RULE_1,RULE_2,RULE_3,RULE_4#time=993470174
Y#12#EMAIL_2#RULE_1,RULE_2,RULE_3,RULE_4#time=993470175
Y#12#EMAIL_3#RULE_1,RULE_2,RULE_3#time=9934701778
내가 파일을 읽고, 각 이메일에 대한 규칙을 얻기 위해 다음 함수를 사용합니다 :
private void processFile()
{
ArrayList<String[]> lSplitRules = new ArrayList<>();
try {
FileInputStream fileStream = new FileInputStream("log.log");
DataInputStream fileIn = new DataInputStream(fileStream);
BufferedReader fileBr = new BufferedReader(new InputStreamReader(fileIn));
String strLine;
while ((strLine = fileBr.readLine()) != null)
{
String[] lTokens = strLineSpam.split("#");
String lRawRules = lTokens[3];
lSplitRules.add(lRawRules.split(","));
}
} catch (FileNotFoundException e) {
System.out.println("File: log.log, not found. Error: " + e.getMessage());
} catch (IOException e) {
System.out.println("Couldn't open log.log. Error: " + e.getMessage());
}
각 라인의 파일이 너무 좋아 관련된 일련의 규칙 이메일을 가지고 여태까지는 그런대로 잘됐다. ArrayList의 각 "space"에는 각 이메일에 대한 규칙을 포함하는 String []이 있습니다. 반면에 나는 또한 규칙의 하나 명의 고유 한 목록을 포함하는의 HashMap을 가지고 있고 그것은 다음과 같은 값입니다 :
RULE_NAME - VALUE
RULE_1 - 0.1
RULE_2 - 0.5
RULE_3 - 0.6
...
나는 그것이 HashMap의에 있는지 너무보고 모든 이메일의 모든 규칙을 비교해야합니다. 나는 '이후,
private Double eval (String rule, Map<String, Double> scores)
{
for (Entry<String, Double> entry : scores.entrySet()) {
if (entry.getKey().equalsIgnoreCase(rule))
{
return entry.getValue();
}
}
return 0.0;
}
문제는 내가 모든 이메일을 비교할 필요가있다 그것은이다 (자세한 10.000 다음)를 여러 번 규칙 : 존재하는 어떤 계산을위한 규칙의 값을 반환하면 나는이 기능을 사용 각 규칙의 가치를 최적화하기 위해 유전자 알고리즘을 사용합니다. 어쨌든 HASHMAP을 통해 각 이메일의 규칙 비교를 최적화 할 수 있습니까? 나는 속도가 필요하므로 지금 8 분 안에 100 개의 검증을하고있다.
죄송합니다.
안부