Comment puis-je couper une ArrayList d'une liste de tableaux en Java?
Comment puis-je obtenir une tranche de tableau d'un ArrayList
en Java? Plus précisément, je veux faire quelque chose comme ceci:
ArrayList<Integer> inputA = input.subList(0, input.size()/2);
//where 'input' is a prepouplated ArrayList<Integer>
J'ai donc attendu à ce travail, mais Java renvoie une List
- donc, c'est incompatible. Et quand j'essaie de le lancer, Java ne me laisse pas. J'ai besoin d'un ArrayList
- ce que je peux faire?
- Pourquoi insistez-vous à l'aide d'un
ArrayList
? Je pense que vous manque peut-être un peu de comprendre comment les interfaces de travail parce queList
etArrayList
ne sont pas “incompatibles”—ArrayList
implémenteList
, etList
probablement contient toutes les méthodes nécessaires dont vous avez besoin. - J'insiste sur l'utilisation de la liste de tableaux, car ses inteview question avec une méthode rigide prototype. De toute évidence, je dois avoir un manque de compréhension, parce que sous-liste est censé renvoyer un type de Liste, et pourtant je ne peux pas jeter la Liste retournée à ArrayList. Alors dites-moi, l'homme..
- C'est tout à fait possible qu'il a besoin d'une
ArrayList
car il doit appeler une méthode avec elle qui accepte unArrayList
. Sans doute une telle méthode est mal conçu et doit accepterList
au lieu de cela, mais de telles situations peuvent survenir non seulement dans les questions de l'entretien, mais dans le code écrit par d'autres que l'on ne peut pas juste aller et de changement. Co-travailleurs et les bibliothèques ne sont pas toujours parfait. - Voir stackoverflow.com/questions/1279476/...
Vous devez vous connecter pour publier un commentaire.
En Java, il est de bonne pratique d'utiliser l'interface de types plutôt que des classes concrètes dans les Api.
Votre problème est que vous utilisez
ArrayList
(probablement dans beaucoup d'endroits) où vous devez vraiment être à l'aide deList
. Comme un résultat que vous avez créé des problèmes pour vous-même avec une contrainte inutile que la liste est unArrayList
.C'est ce que votre code devrait ressembler à:
Votre "solution " proposée" à la le problème a été/est-ce:
Qui fonctionne en faisant une copie de la sous-liste. Ce n'est pas une tranche dans le sens normal. En outre, si la sous-liste est grande, alors faire la copie sera cher.
Si vous êtes contraint par les Api que vous ne peut pas changer, de sorte que vous ont pour déclarer
inputA
comme unArrayList
, vous pourriez être en mesure de mettre en œuvre une sous-classe personnalisée deArrayList
dans lequel lesubList
méthode retourne une sous-classe deArrayList
. Cependant:ArrayList
classe.ArrayList
instances à créer des instances de votre sous-classe à la place.Le "copier le tableau" la solution est plus pratique ... en gardant à l'esprit que ce ne sont pas de vraies tranches.
new ArrayList(input.subList(0, input.size()/2))
Si il n'existe pas de méthode alors je suppose que vous pouvez effectuer une itération de 0 à
input.size()/2
, en prenant chacun des éléments consécutifs et en les ajoutant à une nouvelle liste de tableaux.MODIFIER: en Fait, je pense que vous pouvez prendre cette Liste et l'utiliser pour instancier une nouvelle liste de tableaux à l'aide de l'un des ArrayList constructeurs.
J'ai trouvé une façon si vous connaissez startIndex et endIndex des éléments d'un besoin de retirer de la liste de tableaux
Laisser
al
être l'original de la liste de tableaux etstartIndex
,endIndex
être de début et de fin de l'index pour être retiré de la baie respectivement:Bien que ce post est très vieux. Dans le cas où si quelqu'un est à la recherche de ce..
Goyave facilite le partitionnement de la Liste de sous-listes d'une taille donnée,
C'est comment je l'ai résolu. J'ai oublié cette sous-liste est une référence directe aux éléments dans la liste d'origine, il est donc logique, pourquoi ça ne marcherait pas.