使用Hashmap包含检查重复键的方法

时间:2015-08-04 15:41:53

标签: java arrays hashmap

所以我有一个界面。

=IFERROR(SMALL($CX$2:$DC$11,COLUMNS($CX:CX)),"")

public interface ARecord {
    public BigInteger getAutoID();
    public String getACompId();
}

在使用中,

public class APPPRecord extends AbstratAPRecord implements ARecord{
    private BigInteger autoID;
    private String ACompId = null;
   //setter and getter}

我的PFRecord列表包含重复的结果。我必须使用可以检查ACompId包含密钥的哈希映射。如果密钥已存在,请不要将其传递给recs.addAll。我该怎么做呢?任何帮助表示赞赏

更新:我尝试了Set,但仍然在模型类中看到HashCode()和equals()的重复结果。

    List<APPPRecord> PFRecord = null;
    while(scroll.next()){
      APPPRecord item = (APPPRecord) scroll.get(0);
      List<ARecord> recs = new ArrayList<ARecord>();
      recs.addAll(PFRecord);

还尝试了hashMaps。

    for(ARecord records:recs){
        uniqueRecs.put(records.getACompId(), records);
        Set<String> keys = uniqueRecs.keySet();
        for(String key: keys){
            log.debug("keys " + key);
        }
        }

它们都仍会产生重复的结果。有任何想法吗?

2 个答案:

答案 0 :(得分:0)

替换List<ARecord> recs = new ArrayList<ARecord>();

Set<ARecord> recs = new HashSet<ARecord>();

并确保ARecord的实施正确实施hashcode / equals方法,以便您的设置仅包含 distinct 实例。

答案 1 :(得分:0)

使用HashMap<K,V>课程,此document会为您提供所需的API。

根据您的要求,您可以使用.containsKey(Object key)方法检查密钥是否已存在。

更新:我建议这样做是因为您要求HashMap,如果重复是您唯一的问题,那么您可以在列表上使用.contains(Object o)方法有原地。接口List<>提供此方法,该方法根据值的存在返回boolean值。