Rechercher : dans
Par :

La répetition des elements d'un tableau java

Dernière réponse le 11 nov 2008 à 14:35:04 sabrine, le 9 nov 2008 à 18:08:03 
 Signaler ce message aux modérateurs

Bonjour,


svp je voulais savoir comment supprimer un élément qui se répète un certain nombre de fois.

merci.

Configuration: Windows XP
Firefox 3.0.3

Meilleures réponses pour « la répetition des elements d'un tableau java » dans :
Inverser les éléments d'un tableau -Récursivité- VoirVoici une procédure récursive qui permet d’inverser les éléments d’une partie d’un tableau compris entre la position p et n : Procedure Inverser (Var t : Tab; p, n : Integer); Var aux : Real; Begin If p < n Then ...
Décaler les éléments d'un tableau (Rotation) -Récursivité- VoirVoici une procédure récursive qui permet de décaler tous les éléments d’un tableau d’une position à droite à partir de la position p Procedure Decaler (Var t : Tab; p, n : integer); Begin If p
Trier un tableau sans utiliser la fonction sort VoirTrier un tableau sans utiliser la fonction sort D'abord on initialise une variable $max avec la 1ère valeur de tableau. Ensuite on va faire une boucle tant que le tableau contient encore des éléments. C'est avec la fonction splice qui a le rôle...
Javascript - l'objet Array VoirLes particularités de l'objet Array L'objet Array est un objet du noyau Javascript permettant de créer et de manipuler des tableaux. Voici la syntaxe à utiliser pour créer une variable tableau : var x = new Array(element1[, element2, ...]); Si...
Javascript - Les tableaux VoirIntroduction à la notion de tableau Les variables de Javascript ne permettent de stocker qu'une seule donnée à la fois. Or, étant donné qu'il est souvent utile de manipuler de nombreuses données, le concept de variable se révéle parfois...
Java - Premier programme VoirPremière application avec Java La première chose à faire est de créer un simple fichier texte (sans mise en forme) et de taper les quelques lignes suivantes : // Votre premiere application en Java class FirstApp { public static void main...

1

Marco la baraque, le 9 nov 2008 à 20:40:33

Bonjour Sabrine,
En fait, c'est assez maladroit d'utiliser un tableau en java pour effectuer ce genre de traitement.
Je m'explique. Globalement tu vas créer un tableau de taille donnée, insérer des éléments à tout va, puis lorsque tu vas vouloir supprimer des éléments, tu vas avoir des tableaux avec des trous (et donc de la mémoire perdue).
De plus, pour supprimer les doublons, tu dois :
- créer une hashmap
- parcourir ton tableau (complexité O(n))
- tester si l'élément courant est dans la hashmap : si oui, tu le supprimes, sinon tu le stockes dans la hashmap et tu passes à l'élément suivant

Pour conclure, tu parcours ton tableau O(n), mais en plus tu es obligée de créer une map pour vérifier que chaque valeur n'existe pas (O(n) aussi).

L'idéal selon moi, c'est d'utiliser directement une map, comme cela tu n'auras jamais de problème de doublon et tu optimises tout cela (plus besoin de parcours, plus besoin de vérification).

Cordialement, rtfm and jfgi

Répondre à Marco la baraque

2

sabrine, le 10 nov 2008 à 22:41:16

Je vs remercie pour cette idée mais je ne voulais pas gérer ce problème avec les collections , je veux une solution sur les tableaux.

Répondre à sabrine

3

Marco la baraque, le 11 nov 2008 à 01:05:03

Ok, on va faire ça avec un tableau alors.
Une petite question avant toute chose. Ton tableau a une taille fixe. Autrement dit, quand on va supprimer des éléments, et donc la valeur contenue dans "la case" du tableau sera nulle.

Ma question est donc :
"Est ce que ça te dérange d'avoir un tableau avec plein de valeurs nulles dedans, ou est-ce que tu veux diminuer la taille de ton tableau à chaque suppression afin d'avoir un tableau qui soit toujours plein ?"

Cordialement, rtfm and jfgi

Répondre à Marco la baraque

4

sabrine, le 11 nov 2008 à 10:58:08

Oui ,je veux diminuer la taille de mon tableau à chaque suppression afin d'avoir un tableau qui soit toujours plein mais avec des valeurs uniques non répétitives .

et merci d'avance.

Répondre à sabrine

5

 Marco la baraque, le 11 nov 2008 à 14:35:04
  • +2

Bonjour Sabrine,
Essaie le code suivant:

public static Object[] enleveDoublons(Object[] table) {
		//Complexity = O(n²)
		Object[] copy = new Object[table.length];
		System.arraycopy(table, 0, copy, 0, table.length);
		table = copy;
		for (int i = 0; i < table.length; i++) {
			for (int j = i + 1; j < table.length; j++) {
				//Si table[j] n'est jamais null, simplifier la ligne suivante
				if (table[j] != null && table[j].equals(table[i])) {
					table[j] = table[table.length - 1];
					table[table.length - 1] = null;
					Object[] newTable = new Object[table.length - 1];
					System.arraycopy(table, 0, newTable, 0, table.length - 1);
					table = newTable;
					j--;
				}
			}
		}
		return table;
	}


Tu peux l'utiliser pour copier n'importe quel tableau d'objet, moyennant un cast avant :
Integer[] entree = new Integer[15];
Object[] sortie = enleveDoublons((Object[]) entree);

Ou peut-être plus simple :
Object[] entree = new Integer[15];
Object[] sortie = enleveDoublons(entree);

Par contre ça ne fonctionne pas avec les tableaux de types primitifs (j'utilise des Object[] pour que ce soit générique, et les types primitifs ne sont pas des instances de Object).

Cordialement, rtfm and jfgi

Répondre à Marco la baraque