String[][]
을 사용하는 대신 각 행을 캡슐화하는 데 맞춤 데이터 유형이 필요하지만 더 직접적으로 질문에 대답하려면 각 열에 Map<String,Integer>
을 사용할 수 있습니다. HashMap<String,Integer>
은 최적의 시간에이를 수행 할 것으로 예상됩니다.
import java.util.*;
public class Frequency {
static void increment(Map<String,Integer> map, String key) {
Integer count = map.get(key);
map.put(key, (count == null ? 0 : count) + 1);
}
public static void main(String[] args) {
String table[][] = new String[][] {
{"127.0.0.9", "60", "75000","UDP", "Good"},
{"127.0.0.8", "75", "75000","TCP", "Bad"},
{"127.0.0.9", "75", "70000","UDP", "Good"},
{"127.0.0.1", "", "70000","UDP", "Good"},
{"127.0.0.1", "75", "75000","TCP", "Bad"}
};
final int M = table.length;
final int N = table[0].length;
List<Map<String,Integer>> maps = new ArrayList<Map<String,Integer>>();
for (int i = 0; i < N; i++) {
maps.add(new HashMap<String,Integer>());
}
for (String[] row : table) {
for (int i = 0; i < N; i++) {
increment(maps.get(i), row[i]);
}
}
for (Map<String,Integer> map : maps) {
System.out.println(map);
}
System.out.println(maps.get(0).get("127.0.0.9"));
}
}
이 다음과 같은 출력을 생성합니다 :
{127.0.0.9=2, 127.0.0.8=1, 127.0.0.1=2}
{=1, 60=1, 75=3}
{75000=3, 70000=2}
{UDP=3, TCP=2}
{Good=3, Bad=2}
2
주 : 각 행은 각 열에 대한 주파수 맵 여기
는 아이디어를 입증하는 조각이다 : 모든 열의 값을 혼합하는 데 신경 쓰지 않는다면 a 대신에
Map
하나만 있으면됩니다. 각 열에 하나씩
List<Map>
그러나 이것은 디자인을 더 나쁘게 만들 것입니다.
String[][]
으로 모든 것을 혼합하는 대신 사용자 정의 유형으로 각 행을 캡슐화해야합니다.
예를 들어 일부 열은 실제로는 enum
이어야합니다. 값 - 당신은 위의 질문 자바에 대한지도를 사용하는 일반적인 알고리즘 C# 을 위해 사전을 사용할 수 있습니다
enum Protocol { UDP, TCP; }
enum Condition { Good, Bad; }
//...