我有一个叫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将项目存储在键值对中。它不记得事物的实现顺序(实际上ListMap在意识形态上是不同的事物。列表的概念是按顺序存储内容,并使用索引(位置)来标识它们,而map是标识值)通过键。

Map保证每个键只有一个值。当您添加另一个值时,先前的值将被覆盖。

因此,您需要一个带有唯一标识您的物体的钥匙的地图。这是nomPersonne

用键作为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是否已具有键,并仅在没有键的情况下添加到该键。

09-25 22:18