Я столкнулся с проблемой производительности в своем коде на Java. Я должен подсчитывать частоту каждого объекта, созданного процессом. Тип объекта - «Узел», приведенный ниже. В настоящее время я решил эту проблему, используя технику типа HashMap, приведенную ниже в test1. Однако этот процесс очень медленный, потому что мое моделирование генерирует 100 миллионов миллионов объектов. Более того, я должен разбить String во время каждой итерации, а затем повторить конкатенацию и так далее. Поэтому я подумывал применить технику так, как показано ниже в test2. Но HashMap рассматривает каждый новый объект как новую запись независимо от содержимого внутри объекта. Мне интересно, если кто-то знает, как эффективно решить эту проблему.Ошибка производительности в Java
public class NewMain {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
String[] a={"c","d"};
int[] b={1,2};
Map<String, Integer> test1=new HashMap<>();
test1.put(new Node(a, b).toString(), 1);
test1.put(new Node(a, b).toString(), 3);
System.out.println(test1.size()); // size is 1
//////////////////////////
Map<Node, Integer> test2=new HashMap<>();
test2.put(new Node(a, b), 1);
test2.put(new Node(a, b), 3);
System.out.println(test2.size()); // size is 2
}
}
class Node{
String[] a;
int[] b;
public Node(String[] a, int[] b) {
this.a = a;
this.b = b;
}
public String toString(){
String result=null;
for(String e:a)
result+=e+"|";
for(int e:b)
result+=e+"|";
return result;
}
}
Override 'hashCode' для вашего класса' Node'? –
@ C.B. и 'equals' – resueman
любой конкретной причиной, по которой вы используете' String', а не 'Node' в качестве ключа? – Amadan