Je suis en train d'apprendre collections java. Mais il y a une syntaxe particulière que je ne comprends pas à appeler les méthodes de collecte. Comme .toString()
ou .sort()
par exemple;
Je ne comprends pas la raison pour laquelle nous appelons les méthodes ci - dessous de la classe des tableaux ou des collections de classe. Pour l' impression des tableaux ceci est appelé dans un println()
.
Arrays.toString(myArray);
Pour les listes de tri
Collections.sort(myList);
Et pourquoi pas ?
myArray.toString();
myList.sort();
Peut-on me promener à travers elle?
De la première ligne des docs :
Le cadre des collections est une architecture unifiée pour représenter et manipuler des collections, leur permettant de manipuler indépendamment des détails de leur représentation. Il réduit l'effort de programmation tout en augmentant les performances. Elle permet l'interopérabilité entre les API non apparentés, réduit l'effort dans la conception et l'apprentissage de nouvelles API, et favorise la réutilisation des logiciels. Le cadre est basé sur plus d'une douzaine d'interfaces de collecte. Il comprend les implémentations de ces interfaces et des algorithmes pour les manipuler.
L'objectif est de réduire la duplication de code. Dans le cas de myList.sort()
toutes les mises en œuvre de l' List
interface de devraient mettre en œuvre la sort
fonction, et le tri de chaque mise en œuvre peuvent varier dans le comportement. Mais comme une méthode statique sur la Collections
classe, List
mises en œuvre ne doivent pas mettre en œuvre la fonction de tri. Du point de vue d'un utilisateur, vous pouvez passer tout ce que List
vous devez Collections.sort()
et savoir ce qui va se passer.
Depuis Java 8, cette fonctionnalité aurait pu être mis en œuvre avec des méthodes par défaut, ce qui est ce List.sort(comparator)
fait. Méthodes par défaut permettent toutes les implémentations d' une interface pour recevoir la mise en œuvre définie dans l'interface, donc de Java 8 , il est possible de le faire faire myList.sort()
, avec la mise en garde que vous avez à lui dire comment trier en fournissant une fonction de comparaison. Par exemple, supposant que vous avez un List<Integer>
: mylist.sort(Integer::compareTo)
. Mais les méthodes par défaut Collections Framework date d' avant, d' où la nécessité de Collections.sort()
.
En plus Collections.sort()
et List.sort(comparator)
, vous pouvez également utiliser Stream.sorted()
:myList.stream().sorted().collect(Collectors.toList());