我有一个叫Personne的班级
public class Personne implements java.lang.Comparable<Personne> {
protected String nom;
protected String prenom;
public Personne(String nom,String prenom){
this.nom=nom;
this.prenom=prenom;
}
public String toString(){
return nom+", "+prenom;
}
@Override
public int compareTo(Personne pers) {
// TODO Auto-generated method stub
if(!(pers instanceof Personne))
throw new ClassCastException();
Personne p = pers;
int comparaison;
if((comparaison = nom.compareTo(p.getNom())) != 0)
return comparaison;
else if((comparaison = prenom.compareTo(p.getPrenom())) != 0)
return comparaison;
return comparaison;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getPrenom() {
return prenom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
}
而且我有一个课外人员名单
public class ListePersonne {
protected static ArrayList <Personne> listPers = new ArrayList <Personne>();
public static void main(String[] ards){
Personne p1 = new Personne("Bachene","Adel");
listPers.add(p1);
Personne p2 = new Personne("Bourada","Amine");
listPers.add(p2);
Personne p3 = new Personne("Bachene","Amine");
listPers.add(p3);
Personne p4 = new Personne("Benouda-zouaui","Khalil");
listPers.add(p4);
Personne p5 = new Personne("Bachene","Hakim");
listPers.add(p5);
Personne p6 = new Personne("Mazachi","Oussama");
listPers.add(p6);
Personne p7 = new Personne("Bachene","Issam");
listPers.add(p7);
Personne p8 = new Personne("Allel","Mohamed");
listPers.add(p8);
Personne p9 = new Personne("Bachene","Mohamed");
listPers.add(p9);
Personne p10 = new Personne("Yank","Maher");
listPers.add(p10);
使用第一类的方法
所以我的问题是如何使用hashmap从listPers中获得人员而不在'Nom'中重复?
最佳答案
您不需要HashMap
。Set
应该可以。
Set uniquePers = new HashSet(listPers);
List listUniquePers = new ArrayListSet(uniquePers);
或更简单地说:
List listUniquePers = new ArrayListSet(new HashSet(listPers));
make
equals and hashCode
也在Personne类中实现。 (另请参阅this question的答案)在您发表评论并知道这是家庭作业后进行更新:
ArrayList
(或通常为List
)是一种数据结构,用于存储项目列表并记住将项目添加到列表的顺序。如您所知,它不能保证项目的唯一性。HashMap
将项目存储在键值对中。它不记得事物的实现顺序(实际上List
和Map
在意识形态上是不同的事物。列表的概念是按顺序存储内容,并使用索引(位置)来标识它们,而map是标识值)通过键。Map
保证每个键只有一个值。当您添加另一个值时,先前的值将被覆盖。因此,您需要一个带有唯一标识您的物体的钥匙的地图。这是
nom
的Personne
。用键作为
HashMap
(对于String
)和值-nom
本身创建Personne
:HashMap<String, Personne> uniquePersonne = new HashMap<String, Personne>();
遍历
List
,获取Personne
对象,然后将该对象添加到Map
。就像是:uniquePersonne.put(personne.getNom(), personne)
其中
personne
是列表中的对象现在,
Map
仅具有唯一名称的Personne
。注意:如果有两个同名的
Personne
,则列表中后面的一个将覆盖映射中的前面的一个。如果要避免这种情况,可以使用containsKey
方法查看Map是否已具有键,并仅在没有键的情况下添加到该键。