相关疑难解决方法(0)

为什么我不能在没有枚举的情况下从HashSet中检索项目?

我正在寻找洞察HashSet设计师的头脑.据我所知,我的问题适用于Java和C#HashSets,让我觉得必须有一些很好的理由,尽管我自己也想不到.

在我将项目插入HashSet之后,为什么在没有枚举的情况下检索该项目是不可能的,几乎不是有效的操作?特别是因为HashSet以支持有效检索的方式显式构建.

使用Remove(x)和Contains(x)返回正在删除或包含的实际项目通常很有用.这不一定是我传递给Remove(x)或Contains(x)函数的项目.当然,我想我可以通过HashMap实现同样的效果,但是为什么在完全有可能用套装完成时却浪费了所有的空间和努力?

我可以理解,可能存在一些设计问题,即添加此功能将允许使用HashSet,这与其角色或框架中的未来角色不一致,但如果是这样,那么这些设计问题是什么?

编辑

要回答更多问题,请参阅以下详细信息:

我使用带有重写的hashcode,equals等的不可变引用类型来模拟C#中的值类型.假设类型有成员A,B和C.Hashcode,equals等仅依赖于A和B.给定A和BI希望能够从hashset中检索该等效项并得到它C.我赢了它似乎可以使用HashSet,但我至少想知道这是否有任何充分的理由.伪代码如下:

public sealed class X{
 object A;
 object B;
 object extra;

 public int HashCode(){
  return A.hashCode() + B.hashCode();
 }

 public bool Equals(X obj){
  return obj.A == A && obj.B == B;
 }
}

hashset.insert(new X(1,2, extra1));
hashset.contains(new X(1,2)); //returns true, but I can't retrieve extra
Run Code Online (Sandbox Code Playgroud)

c# java hashset

33
推荐指数
2
解决办法
3万
查看次数

标签 统计

c# ×1

hashset ×1

java ×1