【问题标题】:List<Entry<K,V>> - anything more standard than that? [duplicate]List<Entry<K,V>> - 还有什么比这更标准的吗? [复制]
【发布时间】:2015-02-02 02:23:31
【问题描述】:

我正在制作一个简单的单元测试器,在其中迭代 (input, expected) 值对,并检查计算得到的 actual 值是否等于 expected

这在一个简单的HashMap&lt;INPUTTYPE, OUTPUTTYPE&gt; 中是完全可行的,但是哈希逻辑是没有意义的,因为我要迭代所有值,并且永远不会在地图中搜索,而保持测试的顺序会很好案例((input, expected) 对)。

List&lt;Entry&lt;K,V&gt;&gt; 似乎运行良好,但在 List 中使用 Map 的内部组件似乎不太好。创建 Pair 类来连接输入和预期似乎也不自然,因为 Entry 是一回事。

有没有办法在基础库中使用现有的 Java 类来很好地支持这种数据?

【问题讨论】:

  • 地图可能不是你想要的;如果有多个测试具有相同的期望值怎么办?
  • 只要你想,创建一个入口类很容易。我认为创建自己的入口类是很自然的。
  • 为什么不直接使用LinkedHashMap
  • 当您说您不使用 Entry 但又不想创建自己的东西,因为它存在时,您有点将自己置于一个双赢的境地。如果没有其他选择适合您的需求,我认为自己制作是很自然且容易的。

标签: java data-structures


【解决方案1】:

如果您不想创建任何新类,您可以使用 2 个数组并将预期 [i] 与实际 [i] 进行比较,因为核心 java 中没有标准的元组/对。

【讨论】:

    【解决方案2】:

    简单的Pair 可能是您的最佳选择:

    /**
     * @author OldCurmudgeon
     * @param <P>
     * @param <Q>
     */
    public class Pair<P extends Comparable<P>, Q extends Comparable<Q>> implements Comparable<Pair<P, Q>> {
      // Exposing p & q directly for simplicity. They are final so this is safe.
      public final P p;
      public final Q q;
    
      public Pair(P p, Q q) {
        this.p = p;
        this.q = q;
      }
    
      public P getP() {
        return p;
      }
    
      public Q getQ() {
        return q;
      }
    
      @Override
      public String toString() {
        return "<" + (p == null ? "" : p.toString()) + "," + (q == null ? "" : q.toString()) + ">";
      }
    
      @Override
      public boolean equals(Object o) {
        if (!(o instanceof Pair)) {
          return false;
        }
        Pair it = (Pair) o;
        return p == null ? it.p == null : p.equals(it.p) && q == null ? it.q == null : q.equals(it.q);
      }
    
      @Override
      public int hashCode() {
        int hash = 7;
        hash = 97 * hash + (this.p != null ? this.p.hashCode() : 0);
        hash = 97 * hash + (this.q != null ? this.q.hashCode() : 0);
        return hash;
      }
    
      @Override
      public int compareTo(Pair<P, Q> o) {
        int diff = p == null ? (o.p == null ? 0 : -1) : p.compareTo(o.p);
        if (diff == 0) {
          diff = q == null ? (o.q == null ? 0 : -1) : q.compareTo(o.q);
        }
        return diff;
      }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2019-10-10
      • 1970-01-01
      • 2011-06-13
      • 2016-12-12
      • 2021-04-26
      • 2013-05-17
      • 1970-01-01
      • 2012-03-31
      • 1970-01-01
      相关资源
      最近更新 更多