我正在使用以下代码填充ContentValues变量。
public ContentValues getContentValues() {
ContentValues initialValues = new ContentValues();
initialValues.put("blt_name", m_name);
initialValues.put("blt_pictureURI", m_pictureURI);
initialValues.put("blt_description", m_description);
initialValues.put("blt_UUID", getUUID().toString());
return initialValues;
}
我的问题是put()将UUID和名称放在同一个哈希位置!我不知道为什么。在创建initialValues变量时,它会创建一个具有7个插槽的内部散列映射。当放置值时,密钥在插槽0中添加,名称也在插槽0中添加(覆盖uuid),在插槽3中添加pic,在插槽7中添加desc。
当然,所有四个键都是不同的值,声明为最终字符串。
我尝试了新的ContentValues(4)以强制他们进入正确的位置,这更糟糕。 2个值被覆盖。
[编辑]我刚尝试改变了看跌期权的顺序。通过移动UUID以使其最后放置(),它仍然会覆盖hashmap中的插槽0。 (我知道你在想什么,是的,钥匙是独一无二的。)
[编辑]我尝试使用以下代码,它完美无缺。我迷路了。我还编辑了原始问题,因为我尝试使用硬编码字符串,但这也没有用。
initialValues.put("a", m_name);
initialValues.put("b", m_pictureURI);
initialValues.put("c", m_description);
initialValues.put("d", getUUID().toString());
任何帮助将不胜感激,
-I_Artist
答案 0 :(得分:1)
你确定这是一个问题吗? ContentValues本质上是hash table,而不是数组。在不同的密钥之间存在collisions几乎是不可避免的。但是碰撞不意味着您丢失了数据。确保数据正确存储(或不存储)的唯一真正方法是尝试获取来自ContentValues对象的数据:
String newName = initialValues.get("blt_name");
String newPicture = initialValues.get("blt_pictureURI");
String newDesc = initialValues.get("blt_description");
String newUUID = initialValues.get("blt_UUID");
// now do something with these values to check if they're right...
我打赌你会发现数据的值正确。如果没有,那么比你发布的代码可以向我们展示的更多。
答案 1 :(得分:0)
如果您将密钥硬编码为“Key1”,“Key2”,“Key3”,“Key4”会怎样?我知道你说你确定你的钥匙是独一无二的,但我仍然很好奇,如果可能有一些我们都没有看到的东西......也许你可以告诉我们一个关于钥匙及其价值设定值的例子? / p>
(哈!第一次使用stackoverflow,显然这不是答案......)
(所以这可能是你的回答)
HashMap使用键的hashCode()计算该数组的索引。它不仅使用hashCode()模数组大小,而是使用hashCode()的更复杂函数。
键:“blt_UUID”和“blt_name”可能被散列为相同的值。在这种情况下,两个键被赋予相同的索引并且正在发生“冲突”并且值被覆盖。尝试将密钥更改为其他内容,可能使用全部大小写,然后再次尝试。
祝你好运。