Java: trier un tableau de chaînes, dont les chaînes représentent int
J'ai String[]
tableau comme
{"3","2","4","10","11","6","5","8","9","7"}
Je veux les trier dans l'ordre numérique, pas dans l'ordre alphabétique.
Si j'utilise
Arrays.sort(myarray);
- Je obtenir
{"10","11","2","3","4","5","6","7","8","9"}
au lieu de
{"2","3","4","5","6","7","8","9","10","11"}
- Si vous avez des chaînes de caractères que vous souhaitez utiliser en tant que nombres, pourquoi ne pas les convertir en un type numérique? Ensuite, lorsque vous avez terminé de les utiliser comme des numéros, vous pouvez toujours les convertir en retour à cordes de nouveau... Si vous voulez aller le chemin le plus difficile: créer un Comparateur de<String> pour les fins de la...
- Je ne peux pas vous parcourir le tableau et de le convertir en entiers
- J'ai lu sur des éléments de comparaison, mais ce est la façon la plus efficace? Compator ou simple conversion?
- Lire mon commentaire ci-dessous: il sera toujours plus efficace pour convertir la totalité de l'ensemble d'abord parce que tous les algorithmes de tri prendre plus de comparaisons que la taille de la liste.
- Si vous utilisez le tableau de Chaîne de trier par Tableaux.sort (), alors il n'y a aucun moyen pour vous de les trier comme nombre.Parce que vous ne pouvez même pas changer de méthode equals et de toute façon après tout numéro de tableau est le meilleur choix.
Vous devez vous connecter pour publier un commentaire.
Je pense que, de loin, la méthode la plus simple et la plus efficace pour convertir le
String
s àint
s:Et puis trier le tableau entier. Si vous en avez vraiment besoin, vous pouvez toujours revenir par la suite:
Une autre méthode consiste à utiliser le Comparateur interface de dicter exactement comment les éléments sont comparés, mais ce serait sans doute le montant à convertir chaque
String
de la valeur à unint
de toute façon la prise de l'approche ci-dessus beaucoup plus efficace.Integer.toString(myIntArray[i])
pour illustrer le type de conversion plus explicitement que"" + myIntArray[i]
Essayer une coutume
Comparator
, comme ceci:Espérons qu'il vous plaira!
String
à unint
chaque fois que nous comparer: étant donné que le nombre de comparaisons est toujours plus grande que la taille de la liste, nous faisons plus de conversions que nécessaire. Je ne sais pas si la performance est un problème pour l'OP, mais vaut la peine de garder à l'esprit.De la sortie souhaitée contient l'ordre numérique des correspondants des entiers de vos chaînes. Donc tout simplement vous ne pouvez pas éviter de conversion de chaînes de caractères en nombres entiers. Comme une alternative comparateur de vikingsteve vous pouvez utiliser ceci:
U pouvez utiliser le sol-1 si elle ne contient que des nombres dans un format de chaîne.
Solution 1: -
Solution 2:-
Solution 3:-
Écrire un CustomComparator classe et la passer à la méthode sort ().
Si tous les éléments si votre tableau de chaînes représentant les chiffres, et les chiffres sont toujours positive, alors il existe une manière simple de trier numériquement sans limite à la valeur du nombre.
Ceci est basé sur le fait qu'un nombre avec un plus grand nombre de chiffres est, dans ce cas, toujours supérieur à celui d'un nombre avec un plus petit nombre de chiffres.
Vous d'abord comparer le nombre de chiffres, et ensuite (seulement si le nombre de chiffres est la même) vous comparer la valeur, par ordre alphabétique:
public class test1 {
}
J'ai trouvé cet article sur le tri des chaînes en numérique également le tri pour les chaînes qui peut ou peut ne pas contenir de chiffres:
L'Algorithme Numérique
Il y a un Java exemple de mise en œuvre liées à l'article.
Avec cette classe, vous devriez être en mesure de trier vos tableaux numériquement comme ceci:
dans jdk8, vous pouvez écrire ce code avec lambda.
surtout comme entrée
vous pouvez utiliser des chaînes de caractères.sous-chaîne de choisir la valeur que vous voulez vraiment faire le tri.
comme