IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

chercher un max et min dans une liste de type vector


Sujet :

Collection et Stream Java

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Points : 10
    Points
    10
    Par défaut chercher un max et min dans une liste de type vector
    Bonjour,

    j'ai crée une liste de type vector , qui contient des objets de type entier ( Integer), comment parcourir ma liste pour trouver le maximum et le minimum?


    merci.

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Le type Vector est "vieux" et date d'anciennes versions de JAVA.

    Si tu n'es pas obligée d'utiliser ce type d'objets, je te suggère vivement de le remplacer par une ArrayList.

    Si tu tiens vraiment à utiliser un Vector, voici un bout de code qui devrait t'aider:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public Integer getMax(Vector v) {
       Integer result = Integer.MIN_VALUE;
       Integer temp = null;
       for(int i=0; i<v.size(); i++) {
          temp = (Integer) v.get(i);
          if(temp.intValue() > result.intValue()) { result = temp; }
       }
       return result;
    }
    Evidemment, tu peux t'en inspirer pour écrire une méthode getMin().

    Au passage, si tu changes ton Vector en une ArrayList (ou une LinkedList), le code ci-dessus marche encore: il suffit de changer le type du paramètre de la méthode
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre éclairé Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Points : 861
    Points
    861
    Par défaut
    Pour ce qui est de Vector, tu peux oublier dans les cas simples, il vaut mieux utiliser une ArrayList (ArrayList<Integer> ici).

    Pour le max :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    List<Integer> ta_liste = new ArrayList<Integer>();
    ...
    int max = -1;
    for(Integer i:ta_liste) {
       if(i>max) max = i;
    }
    (grillé)

    Au final j'ai trouvé plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Collections.max(ta_liste);
    Ignorer c'est aussi croire que l'on sait.
    Merci d'essayer d'écrire correctement.
    Pas de questions techniques par MP SVP.

  4. #4
    Membre averti Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Points : 323
    Points
    323
    Par défaut
    Euh... Je ne vois pas en quoi ArrayList est plus simple que Vector. Ces deux classes implémentent toutes deux les mêmes méthodes...
    "Et tu comprendras pourquoi mon nom est l'Eternel, quand sur toi s'abattra la colère du Tout-puissant."

  5. #5
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    Citation Envoyé par Rayndell
    Euh... Je ne vois pas en quoi ArrayList est plus simple que Vector. Ces deux classes implémentent toutes deux les mêmes méthodes...
    Il n'est pas plus simple, il est juste "à préférer" si tu l'utilise dans des applications mono-threadées. Vector est synchronisé, ce qui signifie que la JVM effectuera toutes sortes de tests pour sécuriser ton code exécuté sur le vector en cas d'accès concurent, ce qui n'est pas le cas de ArrayList.

    CF : http://fmora.developpez.com/tutoriel...mediaire/#L5.1

    Fred
    Développeur Java / Flex à Shanghai, Chine
    mes publications
    Mon dernier tutoriel : Messages Quit IRC : explications

    La rubrique IRC recrute des redacteurs : contactez moi

    Ce flim n'est pas un flim sur le cyclimse. Merci de votre compréhension.[/SIZE]

  6. #6
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    De plus Vector est voué à disparaitre...
    Si vraiment tu as besoin d'une collection de type ArrayList synchronisée, tu peux très bien le faire en la créant de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List list = Collections.synchronizedList(new ArrayList(...));

  7. #7
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    Citation Envoyé par iohack
    De plus Vector est voué à disparaitre...
    Ah bon ? Tu as lu ça ou ?

    Fred
    Développeur Java / Flex à Shanghai, Chine
    mes publications
    Mon dernier tutoriel : Messages Quit IRC : explications

    La rubrique IRC recrute des redacteurs : contactez moi

    Ce flim n'est pas un flim sur le cyclimse. Merci de votre compréhension.[/SIZE]

  8. #8
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par mavina
    Ah bon ? Tu as lu ça ou ?

    Fred
    On pourrait corriger la phrase en disant:
    Vector devrait disparaître si les gens savaient qu'une nouvelle API de collection était sortie très récemment (il y a environ 7-8 ans) lol

  9. #9
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Vector ne disparaîtra pas, ne serait-ce que pour la compatibilité ascendante. Au pire, elle peut devenir "deprecated".
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  10. #10
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    Citation Envoyé par ®om
    On pourrait corriger la phrase en disant:
    Vector devrait disparaître si les gens savaient qu'une nouvelle API de collection était sortie très récemment (il y a environ 7-8 ans) lol
    Bah Vector est utile dans certains cas ou la synchronisation est obligatoire, utiliser un Collections.synchronizedList(ArrayList) ou utiliser un Vector, c'est la même chose, je ne vois pas trop la différence à vrai dire : ils implémentent les memes interfaces, ont les memes utilités. L'un est juste passé par une fonction auxiliaire pour être synchronisé où l'autre n'en a pas eu besoin. M'est avis que les fonctions de synchronisation de la classe Collections sont surtout utiles pour des classes comme certaines listes, certains sets ou autres qui n'ont pas leur "équivalent" synchronisé dans l'API de base...

    Je me trompe peut-être

    Fred
    Développeur Java / Flex à Shanghai, Chine
    mes publications
    Mon dernier tutoriel : Messages Quit IRC : explications

    La rubrique IRC recrute des redacteurs : contactez moi

    Ce flim n'est pas un flim sur le cyclimse. Merci de votre compréhension.[/SIZE]

  11. #11
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    La question est surtout : Pourquoi utiliser Vector ?

    La seule réponse que je connaisse : la compatibilité ascendante avec des API pre-Java 1.2 qui l'utiliserait.


    Pour le reste il n'y a aucun intérêt à ne pas lui préférer ArrayList (ou une autre implémentation selon les besoins) :
    • Vector est synchronisé, ce qui est inutile dans 90% des cas (et dans ces cas-là on pourra utiliser Collections.synchronizedList() comme cela a été dit).
    • L'API de Vector n'est pas très clair car elle possède de nombreuse méthode "doublons". A titre de comparaison, et pour les mêmes fonctionnalités, Vector possède 15 méthodes de plus qu'ArrayList.


    a++

  12. #12
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par mavina
    Bah Vector est utile dans certains cas ou la synchronisation est obligatoire, utiliser un Collections.synchronizedList(ArrayList) ou utiliser un Vector, c'est la même chose, je ne vois pas trop la différence à vrai dire : ils implémentent les memes interfaces, ont les memes utilités. L'un est juste passé par une fonction auxiliaire pour être synchronisé où l'autre n'en a pas eu besoin. M'est avis que les fonctions de synchronisation de la classe Collections sont surtout utiles pour des classes comme certaines listes, certains sets ou autres qui n'ont pas leur "équivalent" synchronisé dans l'API de base...

    Je me trompe peut-être

    Fred
    Vector est plus lent que Collection.synchronizedList(new ArrayList())...
    Si vraiment tu veux trouver un argument...

    De toute façon la "synchronisation" ne s'effectue que sur les méthodes, comme l'ajout ou la récupération, mais c'est presque quasiment toujours inutile, car ce qui est important par exemple, c'est que lorsque tu parcours une liste par un itérateur, la liste ne soit pas modifiée par un autre thread. Ceci n'est pas garanti par la synchronisation des méhodes uniquement (dans le cas où ça plante ça lève une ConcurrentModificationException), il faut une synchronisation extérieure...
    Si tu fais la synchro sur un autre objet que sur le vecteur lui-même à l'extérieur, ça te fait double synchronisation (une pour la synchro extérieure, plus une pour la synchro "interne").

    Pour info, l'ajout dans une arraylist est environ 7 fois plus rapide que l'ajout dans un vector... (même si c'est insignifiant).

    Comme l'a dit adiGuba, il n'y a vraiment aucun intérêt à utiliser Vector...

Discussions similaires

  1. Réponses: 7
    Dernier message: 23/12/2013, 18h19
  2. Réponses: 3
    Dernier message: 19/05/2011, 14h24
  3. max et min dans une même table
    Par freestyler dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/05/2008, 17h09
  4. Cocher un items dans une liste de type TCheckListBox
    Par Faith's Fall dans le forum C++Builder
    Réponses: 2
    Dernier message: 02/03/2007, 20h48
  5. Comment Manipuler des objets dans une liste de type TList ?
    Par PadawanDuDelphi dans le forum Delphi
    Réponses: 1
    Dernier message: 02/11/2006, 15h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo