Une autre solution qui pourrait être encore mieux en fonction de votre cas d'utilisation est interné chaînes. C'est la façon dont les symboles sont par exemple Lisp.
Un interné chaîne est une chaîne de caractères de l'objet dont la valeur est l'adresse de la chaîne d'octets. Ainsi, vous créez une interné objet string en vérifiant dans un tableau global: si la chaîne est là, de l'initialisation de l'interné de la chaîne à l'adresse de cette chaîne. Si non, vous l'insérez, puis initialiser votre internés de la chaîne.
Cela signifie que les deux internés chaînes construit à partir de la même chaîne de caractères ont la même valeur, qui est une adresse. Donc, si N est le nombre d'internés des chaînes dans votre système, les caractéristiques sont les suivantes:
- Lente construction (besoins de recherche et, éventuellement, l'allocation de mémoire)
- Nécessite des données globales et de synchronisation dans le cas de threads simultanés
- Comparer est O(1), parce que vous êtes en comparant les adresses, pas de chaîne réelle octets (ce qui signifie que le tri fonctionne bien, mais il ne sera pas un tri par ordre alphabétique).
Cheers,
Carl