Если эффективность использования пространства является вашим приоритетом, тогда вы можете пожертвовать эффективностью времени на операциях с графами и покончить с Hashtable (который, я полагаю, вы используете для хранения помеченных ссылок узла). Просто переключитесь на массив и возьмите на себя стоимость сравнения значений меток в операциях с графами:
public class Node {
private Links[] links;
// ... the ops ...
public static final class Link {
String label;
Node target;
}
}
Если вы хотите еще больше сжать использование памяти и ваше пространство меток конечно (то есть метки не являются уникальными для данного узла; например, «родитель» - метка, которая встречается снова и снова), тогда подумайте об использовании пользовательской Label
класс на шаблон веса , поэтому вы не дублируете экземпляры String
.