[Résolu][Java] Comment créer et gérer une list de taille inconnue

Bonjour à tous,

Bon alors dans le chapitre : je suis un Jeune chercheur noob en prog’ et je me suis engagé à pondre un proto pour ce soir, j’ai une question qui va paraitre conne mais conne, mais j’y arrive pas .

Comment puis je, dans une méthode, créer une liste de string (String[]) sans en connaitre la taille par avance, et ajouter des éléments au sein de cette liste en fonction d’un test sur d’autre donnée ?

un truc du genre :

[left]public static String[] maMethode(Type monTruc)[/left]
[left]{[/left]
[indent]String[] result = null;
[/indent][indent][left]int i = 0;

while
(Truc.getInterface(monTruc, i)!= null)
{

[/left][/indent][indent][indent]if(Truc.getInfos(monTruc, i).getHeader().getType() == DataType.CIBLE)
{[/indent][/indent][indent][indent][indent]//et c’est là que je veux inserer l’ID de l’objet monTruc dans ma liste result[/indent]}
++i;
[/indent][/indent][indent]}
[b]return/b;[/indent]}

Bon je sais c’est surement trivial, et je suis un boulet d’écureuil.
De plus mon code est peut etre pas vraiment élégant, ni bien former, n’hésitez pas à corriger.

EDIT : j’essaie en passant plutot par List pour voir ce que ca donne … les beauté du JAVA :slight_smile: )

Alors, c’est un gros n00b en code (et encore plus en java) qui répond donc pardon si je dis des conneries.
Pourquoi ne pas faire éventuellement une bête liste chaînée? Chaque item a 2 infos: la string, et un pointeur vers l’élément suivant.

Avec un Vector ?

Vector<String> liste = new Vector<String> (); liste.add ("tagada");

http://java.sun.com/j2se/1.5.0/docs/api/ja…til/Vector.html

@Coldo : je déteste les listes chainées :slight_smile: ca me rappel des mauvais souvenir de C et de CaML :crying:

@DaP : ouais au final je suis passé sur un List qui est plus ou moins l’équivalent je pense. Mais bon je dois changer plein de truc :cry: je suis fainéant :P. En tout cas ca rejoind mon idée donc merci. On verra si un autre pro me file mieux :smiley:

[quote=« NSquirrel, post:4, topic: 47033 »]@Coldo : je déteste les listes chainées :slight_smile: ca me rappel des mauvais souvenir de C et de CaML :crying:

@DaP : ouais au final je suis passé sur un List qui est plus ou moins l’équivalent je pense. Mais bon je dois changer plein de truc :cry: je suis fainéant :stuck_out_tongue: . En tout cas ca rejoind mon idée donc merci. On verra si un autre pro me file mieux :D[/quote]

C’est pile poil ce qu’il te faut. C’est justement un des avantages des Vector et autre ArrayList, le fait qu’il se redimensionnent tout seul. Perso j’utiliserais plutot un ArrayList car Vector est synchronisé il me semble, mais bon là je chipote. ^^
note pour toi meme: quand tu parcoureras ta liste de resultat, pense à utiliser iterator(), c’est fait pour ça…

[quote=“ColdFire, post:2, topic: 47033”]Alors, c’est un gros n00b en code (et encore plus en java) qui répond donc pardon si je dis des conneries.
Pourquoi ne pas faire éventuellement une bête liste chaînée? Chaque item a 2 infos: la string, et un pointeur vers l’élément suivant.[/quote]
On est en java ! Il est pas question de ce genre de trucs ici.

le bon objet à utiliser est bien la List, genre List maliste = new ArrayList();

Comme alt3, les objets implémentant l’interface List sont là pour ça. Pas besoin de se casser les coudes à chercher plus loin.

Attention, la notation List n’est valable qu’à partir du java 1.5.

[quote=“alt3, post:6, topic: 47033”]On est en java ! Il est pas question de ce genre de trucs ici.

le bon objet à utiliser est bien la List, genre List maliste = new ArrayList();[/quote]

J’ai dit que j’étais un putain de gros n00b, surtout en java. En gros, j’ai AUCUNE idée de pourquoi java c’est bien pour tel ou tel truc. J’ai dit “liste chainée” parce que c’est le seul truc auquel j’ai pensé en cherchant dans mes vieux souvenirs de fac. Java j’y connais rien, j’assume, après j’essaie juste de proposer un truc, en précisant le misérable niveau de connaissances que j’ai dans ce domaine.

Merci à tous :stuck_out_tongue: y’a aucune raison de s’offusquer :slight_smile:

Tout comme coldo l’immenserie de mon incultance dépasse l’entendure, et si j’avais apprécié les listes chainées j’aurais surement essayer ça :crying:

Sinon Merci pour les List (ArrayList) en plus y’a meme une méthode pour caster ca en String[] tout con à manipuler a l’ancienne (oui c’est moins jolie que les Iterator mais ca sert bien mon propos).

Thx all :cry:

EDIT: tout le monde a deja dit ce que j’avais a dire…

Bah surtout que Java ou pas, un List c’est une liste chainee avec une valeur et un pointeur vers l’element suivant, donc t’as bon, je vois pas pourquoi « pas de ca en java », que le pointeur ait un * a cote ou que ca soit une propriete qui herite de object, c’est toujours un pointeur…

Je pense que la remarque « Pas de ça en Java » avait plutôt un sens : Ne réinvente pas la roue, le package java.util possède déjà toutes les classes de structure de données.

Et non je ne suis pas d’accord avec toi, List est une interface donc il n’est pas question d’implémentation en liste chainée ou autre ! Si tu veux utiliser une liste chainée il faut utiliser LinkedList, sachant que la plus utilisée des listes est quand même ArrayList.

Je chipote, car ce n’est surement pas à toi que je vais apprendre le B-A-BA de la programmation Objet :slight_smile:

Je pense plutot que le « pas de ca en java » s’appliquait a la notion de liste chainee avec des pointeurs, d’ou ma reponse et que la critique du post de cold etait deplacee vu que sa reponse est tout a fait valable meme si elle manque de precision (il explique pourquoi).

Apres je savais pas que List etait une interface en Java, j’ai trop l’habitude de convention de nommage pratiques qui melangent pas tout et rendent evident ce qui est une interface et ce qui l’est pas… genre IList :slight_smile:

Huhu :crying:

Les deux sont une bonne réponse.

Les pointeurs, ce n’est pas dans l’esprit Java, ni même dans la terminologie Java: inutile, voire contre productif d’introduire des notions qui ne feront que semer le trouble.

Pour les listes ordonnées, il y d’autres objets qui implémentent l’interface de base.

Je vois pas comment on peut coder en Java sans comprendre le concept de pointeurs, ou comment ca peut semer le trouble. Ne serais ce que pour comprendre la difference entre int et Integer, donc les notions de boxing, de “primitive types” et “reference types” pour utiliser la terminologie Java, la serialization, l’occupation memoire, les passage par valeur ou par reference, etc, il y a pas moyen sans saisir ce que c’est qu’un pointeur. Comment tu peux comprendre que quand tu fais object a = new a(); object b = a; si tu fais b.setMachin, tu changes aussi a? Il faut bien comprendre ce que c’est qu’une reference (i.e. un pointeur). C’est une notion fondamentale et si on peut coder sans, on code mal et sans comprendre, y a aucun moyen de savoir ce qu’on fait vraiment sans (ce qui exclu d’etre reelement productif).

Parce que quand on débute, il vaut mieux à mon sens comprendre les mécanismes objets en jeu dans Java avant d’aller plus avant et d’exposer les notions que tu énumères

Il me semble que c’est exactement ce qu’il est important de piger avant quoi que ce soit d’autre, comme dit dans mon edit, pour un debutant c’est loin d’etre intuitif que si tu fais:

object a = new a();
object b= a;
b.setMachin(…) ca change a et b.

Mais que si tu fais
int a = 3;
int b = a;
b = 5;
ca a pas changé la valeur de a.

Pareil dans un appel de fonction, quand tu appelle FaisDesTrucsAMonParam(object a) aura pas les meme effets de bord que FaisDesTrucsAMonParam(int a)

De meme que a la base, a moins de faire de l’operator overload (ce que je me souviens pas mais il me semble pas que java fasse):

(new Integer(3) != new Integer(3))

Justement, encore plus pour un debutant, ca me semble super fondamental.

Certes.

Cela dit, la question initiale est d’avoir une collection de données. Dans le contexte du thread, parler de liste chainée et de pointeur, c’est tomber sur les structs dans google, et se retrouver avec des objets à deux membres, etc. Ce me semble contradictoire dans l’aide à apporter au posteur initial.

Edit: et sinon , PM :slight_smile: