Powiedz, mam następujących klas:Performatic struktura bez powielania danych
public class Tagged {
private List<String> tags;
}
public class ContainerOfTagged {
private List<Tagged> tagged;
}
Przy takiej strukturze, ilekroć muszę znaleźć Tagged
z określonym znacznikiem, muszę iteracyjne nad wszystkie oznaczone w ContainerOfTagged
i iterowanie po wszystkich znacznikach każdego z nich: Tagged
. To może wpłynąć na wydajność w zależności od wielkości list.
Prostym rozwiązaniem byłaby zmiana klasy ContainerOfTagged
Aby użyć Map
, tagi mapowania w listach od Tagged
:
public class ContainerOfTagged {
private Map<String, List<Tagged>> tagMapping;
}
Teraz wszystko co musisz zrobić, to zapewnić tag, a Map
zwróci wszystkie Tagged
ze wspomnianym tagiem. Jednak w ten sposób powoduje duplikowanie danych, ponieważ te same znaczniki istnieją w klasach Tagged
i ContainerOfTagged
.
Czy istnieje sposób rozwiązania tego problemu za pomocą rozwiązania performatycznego, które nie powiela danych?
Czy masz tak dużo danych w 'ContainerOfTagged', że użycie pamięci jest naprawdę problem? –
Nie, nie można uniknąć duplikacji, jeśli nie chcesz wykonywać iteracji. –
Czy tablica jest opcją? Czy może Tagged być enum? Także jeśli nunmber znaczników jest uzasadniony, możesz mieć ContainerOfTagged dla każdego tagu. – c0der