importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Collection;importjava.util.List;publicclassClassA{// here, you just say what types are acceptedprivateclassClassB<IextendsInteger,SextendsString>{// it's a bit more wrapping, but for the funprivateList<Object>l;publicClassB(){l=newArrayList<Object>();}privatevoidadd(Classc,Object...params)throwsException{l.addAll(checkIn(c,params));}// here we can do a bunch of checks. Choose your own. It's just the entry gateprivateCollection<?extendsObject>checkIn(Classc,Object...params)throwsException{if(params.length==1&¶ms[0].getClass().equals(c))returnArrays.asList(params[0]);//a bit ugly here. Something better can be doneif(params[0].getClass().equals(c)){returnArrays.asList(params);}thrownewException("You shall not pass!");}publicvoidaddInt(Ii)throwsException{add(i.getClass(),i);}publicvoidaddManyInts(I...i)throwsException{add(i[0].getClass(),i);}publicvoidaddString(Ss)throwsException{add(s.getClass(),s);}publicvoidaddManyStrings(S...s)throwsException{add(s[0].getClass(),s);}publicObjectget(inti){returnl.get(i);}publicintsize(){returnl.size();}privateintgetNumerOfNumbers(){intr=0;for(Objecto:l){if(oinstanceofNumber)r++;}returnr;}// here we just want to do something more subtle than printpublicdoublegetMean()throwsException{intsum=this.getNumerOfNumbers();if(sum==0)thrownewException("Maybe you want numbers...");doublemean=0;for(Objecto:l){if(oinstanceofNumber){mean+=((Number)o).doubleValue()/sum;}}returnmean;}}publicstaticvoidmain(String[]args)throwsException{ClassAa=newClassA();a.doThings();}publicvoiddoThings()throwsException{ClassB<Integer,String>maListeDeBidules=newClassB<>();maListeDeBidules.addInt(1);// okmaListeDeBidules.addString("deux");// okmaListeDeBidules.addManyInts(3,4,5,6,7,8);// okmaListeDeBidules.addManyStrings("neuf","dix","onze","douze","treize","quatorze");// okfor(inti=0;i<maListeDeBidules.size();i++)System.out.println("mon bidule "+(i+1)+" : "+maListeDeBidules.get(i));System.out.println("La moyenne dans ma liste de bidules est de : "+maListeDeBidules.getMean());// here we go!ClassB<Integer,String>maListeDeBidules2=newClassB<>();for(inti=0;i<10000000;i++)maListeDeBidules2.addInt(i);}}
Et le tien que j'ai modifié un tout petit peu (le moins possible) pour faire un petit tour sur une grosse liste d'entiers.
[^] # Re: Typage
Posté par _kaos_ . En réponse au message débutant java : opérations de base sur les listes. Évalué à 1.
Salut,
Regarde.
Mon code actuel :
Et le tien que j'ai modifié un tout petit peu (le moins possible) pour faire un petit tour sur une grosse liste d'entiers.
Alors maintenant on peut regarde ce qui se passe en mémoire :
Mon code :
Code_kaos
Ton code :
Code_autre
Je sais pas si tu vois la petite subtile différence d'approche.
Matricule 23415