2014-05-14 5 views
-4

Je viens de commencer avec des listes en Java et je suis confus avec tout cela. Donc, fondamentalement, nous avons ArrayList et LinkedList qui peut être défini commeQuelles sont les listes en Java

LinkedList<String> s = new LinkedList<String>(); 

    ArrayList<String> s = new ArrayList<String>(); 

Mais nous avons aussi LinkedIntList qui peut être défini comme par exemple:

class LinkedIntList { 
    private ListNode first; 
    private int size; 

    LinkedIntList() { 
     first=null; 
     size=0; 
    } 

    LinkedIntList(LinkedIntList l) { 
     first = l.getFirst(); 
     size=l.size(); 
    } 

    ListNode getFirst() {return first;} 
     int size() {return size;} 
    } 

Mais c'est mon problème, pourquoi définir LinkedIntList en utilisant une classe? Quelle est la différence par rapport à LinkedLists où nous définissons comme je l'ai dit. Je ne comprends pas pourquoi une classe est utilisée. Si c'est un 'nouveau type' de tableau, pourquoi utiliser une classe au lieu de la déclarer normalement?

Désolé si cela semble bizarre, mais je suis un débutant et j'ai vraiment besoin d'aide pour cela.

Merci!

+0

Parce qu'un 'LinkedList' existe toujours dans Java, vous pouvez instancier cette classe, mais il n'y a pas de' LinkedIntList' dans Java implémenté (je n'ai jamais entendu parler de 'LinkedIntList' d'où avez-vous eu ce code?) Donc vous peut créer cette classe par la vôtre. * Note: La liste est seulement une interface. – kai

Répondre

0

Une liste en Java, est une collection ordonnée. Je suppose que vous êtes un débutant et confus avec la syntaxe. Si vous avez java decompiler, vous pouvez voir que LinkedList et ArrayList sont aussi des classes. Ce qui signifie que quelque part une bonne personne a fait le codage pour vous et vous a fourni une classe qui est similaire à votre "LinkedIntList" et vous a fourni hors de la boîte. Vous n'avez pas besoin de créer une nouvelle classe si java fournit suffisamment de fonctionnalités pour vous.

Mais parfois, les classes prêtes à l'emploi ne sont pas suffisantes pour nos besoins. Dans ce cas, nous devons écrire notre propre implémentation de classes, comme votre classe "LinkedIntList".

Dans ce cas, il semble que vous ayez besoin d'une taille et d'un élément donc vous le créez vous-même.

+0

Est-ce que la même chose se produit quand nous déclarons un nouveau tableau? –

+0

En fait, interne tableau est également une classe en Java s'il vous plaît se référer [this] (http://stackoverflow.com/questions/8546500/why-isnt-there-a-java-lang-array-class-if-a-java -array-is-a-object-shouldnt) –

+0

Voilà mon point. Je vous remercie! –

-1

LinkedList est une partie de la classe Java plate-forme package java.util et il est largement utilisé dans différentes tâches. Et il prend en charge Generics.

LinkedIntList est une implémentation personnalisée pour vous montrer comment implémenter la liste de liens uniques.

Vous pouvez trouver plus sur les différents algorithmes et structures ainsi que la complexité here

0

LinkedList est une classe définie dans le package java.util, qui vous est déjà fournie. Il exploite une fonctionnalité appelée Generics qui vous permet de fournir le type d'objets qui peupleront la liste. Vous le prenez essentiellement comme une boîte noire: dans la plupart des cas, vous ne vous souciez pas de l'implémentation réelle, mais seulement de son interface (c'est-à-dire les méthodes qu'elle vous expose).

La classe LinkedIntList que vous avez fournie ne possède pas de généricité, mais est simplement une implémentation d'une liste chaînée dans laquelle chaque élément est ListNode. Je suppose qu'un ListNode contient un nombre entier, sinon le nom LinkedIntList n'aurait pas beaucoup de sens.

Quoi qu'il en soit, vous pouvez défausser cette mise en œuvre (bien qui est bon pour l'apprentissage) et simplement déclarer

LinkedList<Integer> myLinkedList = new LinkedList<Integer>();

Si vous voulez en savoir plus sur les médicaments génériques, take a look at the java tutorials.

0

Dans votre premier exemple,

LinkedList<String> s = new LinkedList<String>(); 

il est la mise en œuvre de LinkedList définie dans la bibliothèque stardard, plus précisément du paquet java.util. Voir ici: http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html

Vous pouvez chercher son code source (1000 lignes de temps je ne serai pas si ici le poster) et le comparer à votre implémentation personnalisée de LinkedIntList. Fondamentalement, Java fournissait déjà une implémentation par défaut de LinkedList (votre premier exemple) mais tout le monde peut encore écrire (une classe) et utiliser sa propre implémentation (votre deuxième exemple).

0

Vous êtes question n'est pas claire, mais je vais essayer de vous expliquer ce que les listes sont essentiellement.

Les listes sont un type de structure de données, non seulement en Java mais dans beaucoup de langage de programmation. Les tableaux sont également un type de structure de données. Les structures de données conservent et gèrent les données de manière organisée.

En Java, la principale différence entre une liste et un tableau est qu'une liste a une taille dynamique, tandis qu'un tableau est de taille fixe lorsque le tableau a été déclaré.

Toutes les listes Java implémentent l'interface List. Si vous ne savez pas quelles sont les interfaces, je vous suggère d'en apprendre plus à ce sujet, mais au fond cela signifie que toutes les listes peuvent faire le même ensemble de choses pour vous, mais les font différemment en interne.

Par exemple, ArrayList utilise des tableaux en interne afin d'étendre ou de réduire la liste si nécessaire (implémenter la taille dynamique). LinkedList implémente les choses différemment en interne, en utilisant des nœuds qui sont connectés les uns aux autres. Mais ils offrent tous deux les mêmes ensembles d'opérations de base au programmeur, définis dans l'interface List (bien que l'un puisse offrir des méthodes supplémentaires, l'autre non). Parce que les différences dans leur implémentation interne, ils peuvent différer dans les performances pour différentes opérations. Ils ont des algorithmes différents pour faire des choses (par exemple, accéder à une valeur dans un index), avec différentes «vitesses» (complexités) de le faire.

La plupart du temps, ArrayList sera le bon choix. This answer talks about when to prefer one over the other.

Espérons que cela aide.

0

Un java List est une collection ordonnée d'objets, ce java.util.List est en réalité une interface (contrat) qui a défini ce à quoi devrait ressembler une liste.

Il existe plusieurs variantes (implémentations) de List dans le JDK Java standard, alors que chacun est différent de l'autre, ils honorent le contrat défini dans List (aspect commandé par exemple).Ces implémentations sont des classes concrètes et vous choisissez dans votre code.

LinkedList et ArrayList vous avez mentionné sont des implémentations JDK de List.

La classe que vous avez partagée (LinkedIntList) est une structure d'objets personnalisée, qui ne fait partie ni du JDK, ni de l'interface Java List.

Questions connexes