8
votes

Collections à chaîne rapide en Java

J'utilise Java et je recherche des collections de chaînes (ensembles et listes) optimisées dans l'espace et sont rapides. Mes cordes sont de taille fixe: 3 ou 5 caractères longs.

S'il vous plaît suggérer à moi s'il y a des bibliothèques de collecte disponibles qui peuvent être le mieux adaptées à moi. Je pensais à des collections basées sur le dictionnaire.

Merci.


2 commentaires

Quelle langue / plateforme?


Combien de chaînes avez-vous, grossièrement? Milliers? Des millions? Des milliards?


5 Réponses :


0
votes

En supposant que vous parlez de C ou C ++, car je ne peux imaginer aucune autre langue où quelqu'un chercherait une bibliothèque de cordes, je conseillerais d'utiliser BString par Paul Hsieh .

Bien que je ne l'ai jamais utilisé moi-même, parce que cela n'a tout simplement pas travaillé dans mon cas, je l'ai adapté à ma propre usage en 2007 en prenant ses concepts comme base. C'est très bien documenté et tout au moins, vous pouvez apprendre une grosse affaire sur les chaînes qui allient simplement à ces liens et à lire sur le matériel de Paul.


0 commentaires

1
votes

Si je voulais une vitesse, j'utiliserais C ++ et la STL et une classe de cordes personnalisée fixée à 8 octets. 8 octets est joliment aligné et 64 bits peuvent donc être comparés dans une seule instruction de la machine.

Utilisation de la STL Vous pouvez choisir d'utiliser un STD :: Set, une STD :: Plan, un ONGURED_SET, une liste STD :: Liste ou une autre structure compatible STL.


2 commentaires

Bonjour, je cherche à optimiser le code Java. L'application utilise beaucoup de collections de chaîne et mes chaînes sont de tailles fixes


@niraj: Vous n'avez pas dit cela dans votre question. Je vais éditer votre question pour vous, mais vous devez indiquer quelles langues et quelles plateformes vous posez sur vos questions.



3
votes

'Collections basées sur le dictionnaire'? HashMap est un choix par défaut. C'est aussi vite que o (1). Et il n'a rien avec la taille de l'élément fixe ou non.


0 commentaires

3
votes

Si vous voulez dire une collection de chaînes, j'irais avec les Hashset . Si vous avez besoin de quelque chose encore plus rapide (en termes de temps de recherche), vous pouvez utiliser un Trie . Les essais donnent une recherche très rapide (o (longueur de chaîne)) indépendamment du nombre de chaînes de la structure de données et peuvent être très compacts.

mais, veuillez tester votre code avec hashset d'abord. Avec plusieurs millions de cordes de petite taille, je n'imagine pas que ce serait très lent.


0 commentaires

2
votes

Vous ne pouvez pas vraiment avoir une "collection rapide" en général, car chaque source de données a sa propre force et sa faiblesse.

Si vous voulez une addition rapide et une itération, ArrayList s sont bons. Si vous faites beaucoup de suppression, vous voudrez peut-être utiliser linkedlist s. Si vous voulez des looks rapides, hashset s est bon, etc.

Si vous avez un accès simultané, il existe également d'autres données de données potentiellement mieux adaptées. Combinant parfois plus d'une source de données pourrait également aider.

En bref, vous devez nous dire pour ce que vous allez utiliser votre DaSTRUCTURE.


0 commentaires