ContentValues和HashMap的区别是什么?

4

ContentValuesHashMap有什么区别?如果有区别,最好的比喻是什么?

ContentValuesHashMap都是用于存储键值对的数据结构。但是它们的使用场景不同。在Android开发中,ContentValues通常用于操作数据库,而HashMap则可以用于任何需要存储键值对的场景。

最好的比喻是ContentValues就像一个表格,每一行代表一个记录,每一列代表一个字段;而HashMap则像一个字典,每个单词代表一个键,每个解释代表一个值。


ContentValues有一个名为writeToParcel(Parcel parcel, int flags)的方法。 - Al Lelopath
2个回答

10

1) HashMap是一个通用的实用类,位于java.util中。另一方面,ContentValues是一个特定的类,在android.content中设计,以符合Android类如SQLiteDatabaseContentResolver

请注意,根据上述指定,它们实现不同的接口:
- HashMap实现了CloneableSerializable
- ContentValues实现了Parcelable

2) ContentValues有一个成员是带有String键的HashMap

   private HashMap<String, Object> mValues

3) ContentValues 有许多方法可以获取和设置类型化的值(例如getAsFloat()等)

结论
您可以将ContentValues视为HashMap的包装器,用于存储类型化值,通常与Android的SQLiteDatabaseContentResolver一起使用。
就是这样


2
请先查看以下链接中的ContentValue.java类的源代码。

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/content/ContentValues.java

如您所见,这个类有一个哈希映射变量(mValues),几乎所有的方法都与它一起工作。例如,当您创建ContentValue对象时,调用ContentValue构造函数,在此构造函数中创建了mValue对象,例如第52行: public ContentValues(int size) { mValues = new HashMap(size, 1.0f); }
或者当您调用ContentValue对象的put方法时,通常会将值放入HashMap对象(mValues)中,例如第95行: public void put(String key, String value) { mValues.put(key, value); }
那么为什么要使用ContentValue?! ContentValue具有一些有用的方法,使其更适合处理某些内容提供程序等。其中最重要的方法之一是writeToParcel():
writeToParcel(Parcel parcel, int flags)
您可以在Android文档中了解所有这些方法。

http://developer.android.com/reference/android/content/ContentValues.html

希望这个评论能对你有所帮助,很抱歉我的英语不太好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接