Salut,

Pour créer notre propre List on pourrait:
1. créer une classe qui contiendra une variable List
2. créer une classe qui dérivera de List ou AbstractList ou ArrayList ... (je ne sais pas quand il est préférable d'utiliser une classe abstraite ou une classe qui implémente déjà une classe non abstraite)

on pourrait aussi peut être faire cela en (3. ) créant une classe qui implémentera une interface concernant une Collection (je connais pas les noms mais il y a en si je me souviens bien).

Qu'elles sont les différences entre la première méthode et la deuxième? Et pourquoi pas aussi avec la troisième.
Conceptuellement, est-ce qu'on ne devrait pas bannir la première méthode? Est-ce que la deuxième méthode devrait se faire en dérivant d'une classe abstraite obligatoirement (AbstractList, AbstractSet) ou ça dépend vraiment du besoin?

Je me suis posé la question parceque je dois implémenter une liste de type "file d'attente de processus". La liste contiendra des objets caractérisés par des priorités.

La liste doit implémenter une interface PriorityQ :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
public interface PriorityQ
{
	public static final int LOWEST_PRIO = 0;
	public boolean put(Object o); 
	public boolean put(int priority, Object o);
	public Object get();
}
La méthode get doit renvoyer l'objet qui a la priorité la plus élevée. S'il y a plusieurs objets qui ont la même priorité, c'est le premier entré dans la liste que l'on obtiendra.

J'ai utilisé la 2ème méthode : je fais dérivé ma classe de TreeSet (il faut savoir qu'on doit implémenter cette file de processus à partir de deux Collections différentes et donc je n'ai pas vraiment pensé à quelle Collection conviendrait la mieu, en me disant que ça irait avec n'importe laquelle). Dans ma solution, j'ai aussi utilisé une classe Contenu qui sert à regrouper un objet et sa priorité. Ainsi, quand on utilise la méthode put de l'interface, on stock l'objet et la priorité dans un objet de type Contenu, puis on ajoute cet objet Contenu à ma liste et les méthodes de ma liste s'occuperont de gèrer l'objet Contenu pour que ce soit invisible pour l'utilisateur qui l'utilisera en fonction des méthodes de l'interface.

Voilà ma liste :
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import java.util.AbstractSet;
import java.util.Collections;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
 
 
public class FileAPriorité extends TreeSet implements PriorityQ{
 
	public FileAPriorité (){
		super();
	}
 
	public Object get() {
 
		Object o = this.first();
		Contenu c = (Contenu) o;
 
		this.remove(c);
 
		return c.getObjet();
 
	}
 
	public boolean put(Object o) {
 
		Contenu c = new Contenu(o, LOWEST_PRIO);
		this.add(c);
 
 
		return false;
	}
 
	public boolean put(int p, Object o) {
 
		Contenu c = new Contenu(o, p);
		this.add(c);
 
		return false;
	}
 
 
	class Contenu implements Comparable{
 
		private Object objet;
		private int priorité;
 
		public Contenu(Object o, int p){
			objet = o;
			priorité = p;
		}
 
		public Object getObjet(){
			return this.objet;
		}
 
		public int compareTo(Object o) {
			Contenu c = (Contenu) o;
			if(this.priorité < c.priorité){
				return 1;
			}else if(this.priorité > c.priorité){
				return -1;
			}else{
				return 0;
			}
		}
	}
 
 
 
}
Si vous avez des remarques sur ce que j'ai fais, n'hésitez pas, mais j'ai créé le post vraiment pour savoir la différence entre les méthodes citées plus haut. C'est vrai que j'ai pas mal développé mon exercice... comme-ça ce que je ne comprend pas sera peut-être plus compréhensible

A toute.