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 :

Comparer de tableau d'entiers


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Par défaut Comparer de tableau d'entiers
    Salut la communauté.
    Est ce qu'il existe en java une methode qui permet de comparer deux tableaux d'entiers et de renvoyer si possible le resultat (les elements presents dans l'un et absents dans l'autre) dans un nouveau tableau; un peu comme en php avec array_diff.Sinon est ce que quelqu'un a déjà ecrit un code comme ca.
    Merci

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Ca ne me dit rien.
    Fait le à la main !
    1. trier tes deux tableaux avec java.util.Arrays.sort
    2. itérer sur les deux tableaux en parallèle et ranger les éléments dans un nouveau tableau.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre émérite Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Ou faire directement quelque chose du genre (mais avec des listes...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
        List<Integer> list1 = new ArrayList<Integer>();
        for (int i = 0; i < 11; i=i+3) {
            list1.add(i);
        }
        List<Integer> list2 = new ArrayList<Integer>();
        for (int i = 0; i < 11; i = i + 2) {
            list2.add(i);
        }
        List<Integer> listNonPresent = new ArrayList<Integer>();
        List<Integer> listPresent = new ArrayList<Integer>();
        for (Integer element : list1) {
            if (list2.contains(element)) {
            listPresent.add(element);
            } else {
            listNonPresent.add(element);
            }
        }
        for (Integer element : list2) {
            if (!list1.contains(element)) {
            listNonPresent.add(element);
            }
        }

  4. #4
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Pour faire une recherche rapide, en plus de trier ton tableau, je te conseille de faire une recherche dichotomique. Tu trouveras un exemple en java ici.

    Une autre solution serait d'utiliser les ArrayList, ce serait plus simple mais je pense moins performant.

  5. #5
    Membre éclairé Avatar de fatypunk
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 71
    Par défaut
    Voila la solution avec des listes (et générique en plus...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public class ArrayUtil<T> {
     
        public T[] arrayDiff(T[] array1, T[] array2) {
            List<T> array1List = Arrays.asList(array1);
            List<T> array2List = Arrays.asList(array2);
            List<T> resultList = new ArrayList();
     
            for(T element : array1List) {
                if (!array2List.contains(element)) {
                    resultList.add(element);
                }
            }
     
            return (T[]) resultList.toArray(new Object[resultList.size()]);
        }
     
    }
    J'ai pas testé le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return (T[]) resultList.toArray(new Object[resultList.size()]);
    Comme on peut pas créer un tableau générique j'ai tapé ça sans tester... Mais je pense que ça devrait marcher.

  6. #6
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Par défaut
    Salut,merci pour toutes vos réponses et désolé de n'avoir pas vite donné suite.
    J'ai finalement écris un code qui marche. Je voulais juste un truc simple ; exemple comparer les tableaux tab={0,10,30,45,60} et tab1={0,15,45} puis ressortir les éléments présents dans tab et absents dans tab1 et les mettre dans le tableau compare.Voici ce que j'ai fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     for(k=0;k<tab.length;k++)
    	         {	 
    	           for(l=0;l<tab1.length;l++)
    	            {  
    	              if(tab[k]==tab1[l])
    	              {
    	               break;
    	              }
    	              else p++;
    	            }
    	           if(p==3)
    	            {
    	              compare[a]=tab[k];
    	              a++;
    	              p=0;
    	            }
    	            l=0;
    	            p=0;
     
    	         }
    	         //Affichage du tableau resultat
    	         for(u=0;u<a;u++)
    		       {
    		         System.out.println(""+compare[u]);	         
    		       }
     
    	        }

  7. #7
    Membre éclairé Avatar de fatypunk
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 71
    Par défaut
    Citation Envoyé par charles9 Voir le message
    Salut,merci pour toutes vos réponses et désolé de n'avoir pas vite donné suite.
    J'ai finalement écris un code qui marche. Je voulais juste un truc simple ; exemple comparer les tableaux tab={0,10,30,45,60} et tab1={0,15,45} puis ressortir les éléments présents dans tab et absents dans tab1 et les mettre dans le tableau compare.Voici ce que j'ai fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     for(k=0;k<tab.length;k++)
    	         {	 
    	           for(l=0;l<tab1.length;l++)
    	            {  
    	              if(tab[k]==tab1[l])
    	              {
    	               break;
    	              }
    	              else p++;
    	            }
    	           if(p==3)
    	            {
    	              compare[a]=tab[k];
    	              a++;
    	              p=0;
    	            }
    	            l=0;
    	            p=0;
     
    	         }
    	         //Affichage du tableau resultat
    	         for(u=0;u<a;u++)
    		       {
    		         System.out.println(""+compare[u]);	         
    		       }
     
    	        }
    Tu trouve vraiment ça plus simple que ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            List<Integer> array1List = Arrays.asList(array1);
            List<Integer> array2List = Arrays.asList(array2);
            List<Integer> resultList = new ArrayList();
     
            for(Integer element : array1List) {
                if (!array2List.contains(element)) {
                    resultList.add(element);
                }
            }
    En plus on comprend en un coup d'oeil ce que ça fait...

    Et pour afficher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            for(Integer element : resultList) {
                System.out.println("" + element.intValue());
            }
    Ou obtenir un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Integer[] resultArray = resultList.toArray(new Integer[resultList.size()]);
    En fait je trouve les tableaux horribles à manipuler... en général j'évite de les utiliser.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Charger un fichier dans tableau d'entier
    Par nico0007 dans le forum Langage
    Réponses: 12
    Dernier message: 17/04/2008, 11h30
  2. Limite Allocation Mémoire d'un tableau d'entier
    Par l9ft b9hind dans le forum C++
    Réponses: 5
    Dernier message: 27/10/2005, 19h29
  3. convertir tableau d'entier en char[]
    Par nin47 dans le forum C
    Réponses: 20
    Dernier message: 12/10/2005, 20h03
  4. Réponses: 2
    Dernier message: 03/10/2005, 22h16
  5. Réponses: 6
    Dernier message: 23/05/2005, 10h47

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