Возможности (в порядке увеличения отпечатка памяти):
Map<String, String> map = new HashMap<>(); // Concatenated string values
List<String> get(String key) {
return Arrays.asList(map.getOrDefault(key, "").split("\f"));
}
Map<String, String[]> map = new HashMap<>();
private static final String[] EMPTY = new String[0];
List<String> get(String key) {
return Arrays.asList(map.getOrDefault(key, EMPTY));
}
Map<String, List<String>> map = new HashMap<>(); // LinkedList
List<String> get(String key) {
return map.get(key);
}
(Просто пример кода. Я плохо справлялся с пустыми строками.)
Как говорили другие, измерение пространства и скорости .Также рассмотрите Set<String>
как более оптимальную структуру данных вместо List
.Рассмотрим Collections.singletonList("...")
и emptyList()
.
Если строки в основном латинские-1, рассмотрим java 9, использующий более компактные байтовые массивы (в отличие от java 8).
С большими строками вы можете сжиматьbyte[]
с использованием GZipOutputStream
.
И последний вариант, исчерпывающий java -Xmx
и физическую память: используйте базу данных .