특정 변수의 모든 값을 데이터 집합에 저장하고 각 값의 빈도를 저장하려고합니다. 이렇게하려면 ArrayList<String>
을 사용하여 값을 저장하고 ArrayList<Integer>
을 사용하여 주파수를 저장합니다 (int
을 사용할 수 없기 때문에). 다른 값의 수를 알 수 없으므로 ArrayList
이 아닌 Array
을 사용합니다.ArrayList의 값 업데이트를 최적화하는 방법 <Integer>
예 (간략화 된) 데이터 세트 :
a,b,c,d,b,d,a,c,b
값으로 ArrayList<String>
는 같다 : {a,b,c,d}
및 주파수와는 ArrayList<Integer>
같다 : {2,3,2,2}
.
이들을 채우려면 다음 코드를 사용하여 데이터 집합의 각 레코드를 반복합니다.
public void addObservation(String obs){
if(values.size() == 0){// first value
values.add(obs);
frequencies.add(new Integer(1));
return;//added
}else{
for(int i = 0; i<values.size();i++){
if(values.get(i).equals(obs)){
frequencies.set(i, new Integer((int)frequencies.get(i)+1));
return;//added
}
}
// only gets here if value of obs is not found
values.add(obs);
frequencies.add(new Integer(1));
}
}
는 그러나, 나는 매우 큰 수 있습니다 이것을 사용하는 데이터 세트부터, 내 코드를 최적화 할, 그리고
frequencies.set(i, new Integer((int)frequencies.get(i)+1));
를 사용하여 매우 효율적인 보이지 않는다.
그건 내 질문에 나를 데려옵니다; ArrayList
에서 Integer
값의 업데이트를 최적화하려면 어떻게해야합니까?
"매우 효율적으로 보이지는 않습니다."프로파일을 작성한 것처럼 보이지 않습니다. –
지도를 사용해야합니다. 그러나 두 개의 목록을 사용하더라도 자신을 반복하는 대신 indexOf를 사용하면 코드를 훨씬 간단하게 만들 수 있습니다. 빈 목록의 경우와 "목록에없는 값"의 경우도 함께 그룹화 할 수 있습니다. –
소위 멀티 세트를 다시 구현 중입니다. 이를위한 구현을 찾아서 사용하십시오. – jmg