java - 检查配对的数据结构?

标签 java data-structures

假设我有对象 A、B、C、D。它们可以包含彼此的引用,例如,A 可能引用 B 和 C,而 C 可能引用 A。我想创建段,但不想创建两次,所以我不需要段 A C 和段 C A,只需其中 1 个。所以我想保留创建的段的列表,例如:A C,并检查我是否已经有 A C 或 CA,如果有则跳过它。

有没有一种数据结构可以做到这一点?

谢谢

if(list.contains(a,b)
{
   //dont add
}

最佳答案

你可以介绍类似的东西

class PairKey<T extends Comparable<T>> { 
  final T fst, snd;
  public PairKey(T a, T b) {
    if (a.compareTo(b) <=0 ) {
      fst = a;
      snd = b;
    } else {
      fst = b;
      snd = a;
    }
  }

  @Override
  public int hashCode() {
    return a.hashCode() & 37 & b.hashCode();
  }

  @Override
  public boolean equals(Object other) {
    if (other == this) return true;
    if (!(other instanceOf PairKey)) return false;
    PairKey<T> obj = (PairKey<T>) other;
    return (obj.fst.equals(fst) && obj.snd.equals(snd));
  }
}

那么你可以将边放入 HashSet < PairKey < ?扩展 Comparable>> 然后检查给定的对是否已经存在。

您需要使顶点具有可比性,因此可以将 PairKey(A,B) 视为等于 PairKey(B,A)

然后 HashSet 将为您完成剩下的工作,例如您将能够查询

pairs.contains(new PairKey(A,B)); 

如果对包含 PairKey(A,B) 或 PairKey(B,A) - 它将返回 true。

hashCode 实现可能略有不同,IDE 可能会生成更复杂的东西。

希望有帮助。

关于java - 检查配对的数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12771016/

相关文章:

java - 通过反射从类的变量获取值,然后使用值的方法

Java - 直方图程序

python - 具有快速前缀搜索的只读字符串列表(大约 100,000)的最有效数据结构

.net - .NET 中的双向映射

java - 为什么使用 Offer() 在 java 中填充优先级队列会按字母顺序填充它,同时它还优先考虑大写单词?

java - NoSuchElementException 不断被触发,我不知道为什么

java - 静态/抽象冲突

java - 如何从 Excel 读取 SQL 查询并传递到 JDBC 代码

java - Java中最好的大集合数据结构

c - 不使用递归的二叉树遍历