1
Map<obj, Integer> myMap = new Map<obj, Integer>;

myObj1 = new obj(value = "a");
myObj2 = new obj(value = "b");
myObj3 = new obj(value = "a");

myMap.put(myObj1, 1);
myMap.put(myObj2, 2);
myMap.put(myObj3, 3);

//myMap.size() returns a value of 2, but I want three distinct entries

所以,我知道为什么会发生上述情况,我想知道如何最好地处理它。

我想创建一个使用 sObject(我的应用程序中的自定义对象)键入的地图。问题是映射键唯一性的测试是针对对象字段的值,而不是对象在内存或其他 Id 中的位置。

我非常想避免保存记录并检索 ID 以用于唯一性。有关如何管理此问题的任何其他建议?

4

1 回答 1

1

如果两个对象返回相同的 hashCode 他们认为是相同的键。建议在 map 中使用不可变对象(例如字符串)作为键,因为如果您稍后更改 sobjects 可能会破坏 map。使用 ids 是任何其他唯一字段都可以做的一个不错的选择。

于 2013-10-22T08:19:00.740 回答