2 Methode de gestion d'index (Java)

  • Auteur de la discussion chansey123
  • Date de début

chansey123

Nouveau membre
Bonjour!

J'ai récemment eu à programmer une interface qui créait un Index avec deux ArrayList (1 pour l'element, 1 pour la position de l'element dans l'index). J'ai terminé cette interface de multiples méthodes avec succès et elle ressemble à ceci :


/**
* Implementation de TDAIndex.
*
* Un index est un ensemble dans lequel il y a des elements de type <T>. Chaque element est accompagne d'un entier ou plusieurs qui peuvent corresponde a
* un numero de ligne, un numero de page, etc.
*
* @author
* @version
*/

import java.util.ArrayList;

public class Index<T> implements TdaIndex<T> {

private ArrayList<T> elements; // les elements (pas de doublons)
private ArrayList<ArrayList<Integer>> listesNumeros; // les numeros pour chaque elements

public Index () {
elements = new ArrayList<T>();
listesNumeros = new ArrayList<ArrayList<Integer>>();
}

/**
* Retourne true si cet index est vide.
* @return true si cet index est vide, false sinon
*/
public boolean estVide () {
return elements.isEmpty();
}

/**
* Vide cet index
*/
public void vider () {
elements.clear();
listesNumeros.clear();
}

/**
* Retourne le nombre d'elements distincts
* @return le nombre d'elements distincts de cet index
*/
public int nombreDistincts () {
return elements.size();
}

/**
* Retourne le nombre total d'elements
* @return le nombre total d'elements incluant les doublons
*/
public int nombreTotal () {
// On pourrait aussi maintenir un compteur. On ne serait pas obliges alors de faire cette boucle
int reponse = 0;
for ( int i = 0; i < listesNumeros.size(); ++i ) {
reponse += listesNumeros.get(i).size(); // nombre de numeros accompagnant le i-eme element
}
return reponse;
}

/**
* Ajoute l'element avec son numero
* @param element element a ajouter
* @param numero numero accompagnant l'element
* @return true s'il s'agit d'un nouvel element, false si l'element est deja dans l'index.
*/
public boolean ajouter ( T element, int numero ) {
int pos = elements.indexOf ( element );
boolean estAbsent = pos == -1;
if ( estAbsent ) {
// ajouter ce nouvel element
pos = elements.size();
elements.add ( element );
// preparer sa liste de numeros
listesNumeros.add ( new ArrayList<Integer>() ); // liste vide
}
// pos contient la position de l'element (nouveau ou non) dans sa liste
listesNumeros.get(pos).add ( numero );
return estAbsent;
}

/**
* Retire le numero (une occurrence) accompagnant l'element. Les autres numeros demeurent avec l'element le cas echeant.
* @param element element a retirer
* @param numero numero accompagnant l'element.
* @return true si le retrait s'est effectue avec succes (element present et numero present), false si le numero ou l'element n'existe pas.
*/
public boolean retirer ( T element, int numero ) {
boolean reponse = false;
int pos = elements.indexOf ( element );
if ( pos >= 0 ) {
// element present a la position pos
reponse = listesNumeros.get ( pos ).remove ( (Integer) numero ); // enleve une occurrence si numero present
if ( listesNumeros.get ( pos ).isEmpty() ) {
// s'il ne reste aucun numero avec l'element, il faut retirer cet element ainsi que sa liste vide de numeros
listesNumeros.remove ( pos );
elements.remove ( pos );
}
}
return reponse;
}

/**
* Retire completement l'element de l'index.
* @param element element a retirer
* @return true si le retrait s'est effectue avec succes, false si l'element n'existe pas.
*/
public boolean retirer ( T element ) {
boolean reponse = false;
int pos = elements.indexOf ( element );
if ( pos >= 0 ) {
// element present
elements.remove ( pos );
listesNumeros.remove ( pos );
reponse = true;
}
return reponse;
}

/**
* Retourne l'union de cet index avec celui en parametre.
* @param autre TdaIndex avec lequel faire l'union
* @return le nouvel index resultat de l'union de cet index avec autre.
*/
public TdaIndex<T> union ( TdaIndex<T> autre ) {
Index<T> reponse = new Index<T>();
// copier integralement this dans reponse
for ( int i = 0; i < elements.size(); ++i ) {
reponse.elements.add ( elements.get(i) );
ArrayList<Integer> laListeDeNumerosDeElementI = listesNumeros.get(i);
ArrayList<Integer> laCopie = new ArrayList<Integer>();
for ( int j = 0; j < laListeDeNumerosDeElementI.size(); ++j ) {
laCopie.add ( laListeDeNumerosDeElementI.get(j) );
}
reponse.listesNumeros.add ( laCopie );
}
// ajouter les elements et leurs numeros contenus dans l'index autre
// (version non optimisee)
for ( int i = 0; i < ((Index<T>)autre).elements.size(); ++i ) {
T elem = ((Index<T>)autre).elements.get ( i );
ArrayList<Integer> laListeDeNumerosDeElementI = ((Index<T>)autre).listesNumeros.get(i);
for ( int j = 0; j < laListeDeNumerosDeElementI.size(); ++j ) {
reponse.ajouter ( elem, laListeDeNumerosDeElementI.get ( j ) );
}
}
return reponse;
}

/**
* Retourne true si cet index contient l'element
* @param element element a verifier
* @return true si element est dans l'index, false sinon
*/
public boolean estElement ( T element ) {
return elements.indexOf ( element ) >= 0;
}

/**
* Retourne le nombre de numeros accompagnant l'element dans cet index.
* @param element element a verifier
* @return le nombre de numeros accompagnant l'element dans cet index.
*/
public int nbApparitions ( T element ) {
int reponse = 0;
int pos = elements.indexOf ( element );
if ( pos >= 0 ) {
reponse = listesNumeros.get ( pos ).size();
}
return reponse;
}

/**
* Retourne le tableau de numeros accompagnant l'element dans cet index.
* @param element element pour lequel on veut les numeros
* @return le tableau de numeros accompagnant l'element dans cet index.
*/
public int[] lesNumeros ( T element ) {
int [] reponse;
int pos = elements.indexOf ( element );
if ( pos == -1 ) {
// element absent, donc aucun numero qui l'accompagne
reponse = new int [0]; // tableau de longueur 0
} else {
ArrayList<Integer> liste = listesNumeros.get ( pos );
reponse = new int [ liste.size() ];
for ( int i = 0; i < liste.size(); ++i ) {
reponse [ i ] = liste.get(i);
}
}
return reponse;
}

/**
* Retourne le tableau d'elements de cet index.
* @return le tableau d'elements de cet index.
*/
public T[] lesElements () {
T[] reponse = (T[])(new Object[elements.size()]);
for ( int i = 0; i < reponse.length; ++i ) {
reponse = elements.get(i);
}
return reponse;
}

/**
*
*
*/
public String toString () {
String reponse = "";
for ( int i = 0; i < elements.size(); ++i ) {
reponse += elements.get(i).toString() + '\n' + " ";
ArrayList<Integer> liste = listesNumeros.get ( i );
for ( int j = 0; j < liste.size(); ++j ) {
reponse += liste.get ( j ) + " ";
}
reponse += '\n';
}
return reponse;
}
} // Index

--------------------------------

Maintenant avec ces méthodes, je dois faire un nouveau programme qui prends un fichier de commandes.txt et qui sort ensuite un fichier resultats.txt. Dans le nouveau programme il y a deux methodes que je ne sais plus trop comment programmer, je crois que ça fait trop longtemps que j'regarde du code et je n'y voit plus clair. :S

1. Une méthode qui prends un numéro et qui affiche tous les mots associés à ce numéro de l'index.

2. Une méthode qui affiche tous les mots qui n'ont qu'un seul numéro.

Si vous pouviez m'aider ce serait grandement apprécié...

Merci d'avance!!

-Chansey
 

Storos

Modérateur cochon
Staff
Commence par éditer ton message pour qu'il respecte les règles du forum... :o

Un indice: utilise les balises
Code:
 pour encadrer ton code. Sa présentation rendra mieux, il sera plus lisible, et tu éviteras d'encourir les foudres du terrible zeb, modérateur de la rubrique...  ;)

EDIT: Tu ferais mieux de te dépêcher, je l'entend déjà rôder autour de ton sujet... :D
 

zeb

Modérateur
[:zeb:4] <--- Le shérif

Edit:

[:zeb:4] [:storos:7] <--- Le shérif et son fidèle adjoint
 

Storos

Modérateur cochon
Staff
Comme ils sont mignons à matraquer de concert! :love:
 

saley25

Nouveau membre
je veux trouver comment crée un fichier index en java et en utiliser les sockets
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 054
Membres
1 586 393
Dernier membre
mathhh28
Partager cette page
Haut