Android开发中ArrayMap与HashMap有哪些不同

Android开发中ArrayMap与HashMap有哪些不同,第1张

常用的集合类有一下几种:

List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类

Map结构的集合类和租:胡棚拆HashMap类,Hashtable类

Set结构的集合类:HashSet类,TreeSet类

Queue结构的集合:Queue接口

HashMap和Hashtable的区别:

HashMap和Hashtable都是java的集合类,都可以用来存放java对象,这是他们的相同点

以下是他们的区别:

1.历史原因:

Hashtable是基于陈旧的Dictionary类的,HashMap是java

1.2引进的Map接口的一个现实。

2.同步性:

Hashtable是同步的,这个类中的一些方法保证了Hashtable中的对象是线程安全的,而HashMap则是异步的,因此HashMap中的对象并不是线程安全的,因为同步的要求会影响执行的效率,所以如果你不需要线程安全的结合裤枣那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率,我们一般所编写的程序都是异步的,但如果是服务器端的代码除外。

3.值:

HashMap可以让你将空值作为一个表的条目的key或value

Hashtable是不能放入空值(null)的

首先先要获取你的debug keystore位置: 打开Eclipse--->Windows--->Preferences--->Android--->Build 查看默认的debug keystore位置,我的是C:\Documents and Settings\MYNAME \.android\debug.keystore 2. 在cmd中执行: keytool -list -keystore ~/.android/debug.keystore 或者是: keytool -list -alias androiddebugkey -keystore "路径\debug.keystore " -storepass android -keypass android 双引号中的为你keystore位置, 注意,你的双引号一定要有,否则就会报错:keytool error: java.lang.RuntimeException: Usage error, and is not a legal command 执行结果局培含: androiddebugkey, May 4, 2009, PrivateKeyEntry, Certificate fingerprint (MD5): XX:XX:XX:XX:XX:XX:XX:XX............. 这里的XX:XX:XX:XX:XX:XX:XX:XX.............就是你的认证指纹 3. 打开 填入你的认证指纹(MD5)即可获得apiKey了,结果显示如下: 感桐笑谢您注中唤册 Android 地图 API 密钥! 您的密钥是: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4. 使用得到的apiKey: 在layout中加入MapView <com.google.android.maps.MapView android:id="@+id/mapview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:apiKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXX

HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,其中 HashMap 是 Map 接口的常用实现类,HashSet 是 Set 接口的常用实现类。虽然 HashMap 和 HashSet 实现的接口规范不同,但它们底层的 Hash 存储机制完全一样,滚拍首甚至 HashSet 本身就采用 HashMap 来实现的。

1. 程序试图将多个 key-value 放入 HashMap 中时,以如下代码片段为例:大数

Java代码

HashMap<String , Double>map = new HashMap<String , Double>()

map.put("语文" , 80.0)

map.put("数学" , 89.0)

map.put("英语" , 78.2)

2.HashMap 采用一种所谓的“Hash 算法”来决定每个元素的存储位置。

当程序执行 map.put("语文" , 80.0)时,系贺液统将调用"语文"的 hashCode() 方法得到其 hashCode 值——每个 Java 对象都有 hashCode() 方法,都可通过该方法获得它的 hashCode 值。得到这个对象的 hashCode 值之后,系统会根据该 hashCode 值来决定该元素的存储位置。

3. HashMap 类的 put(K key , V value) 方法的源代码:

public V put(K key, V value)

{

// 如果 key 为 null,调用 putForNullKey 方法进行处理

if (key == null)

return putForNullKey(value)

// 根据 key 的 keyCode 计算 Hash 值

int hash = hash(key.hashCode())

// 搜索指定 hash 值在对应 table 中的索引

int i = indexFor(hash, table.length)

// 如果 i 索引处的 Entry 不为 null,通过循环不断遍历 e 元素的下一个元素

for (Entry<K,V>e = table[i]e != nulle = e.next)

{

Object k

// 找到指定 key 与需要放入的 key 相等(hash 值相同

// 通过 equals 比较放回 true)

if (e.hash == hash &&((k = e.key) == key

|| key.equals(k)))

{

V oldValue = e.value

e.value = value

e.recordAccess(this)

return oldValue

}

}

// 如果 i 索引处的 Entry 为 null,表明此处还没有 Entry

modCount++

// 将 key、value 添加到 i 索引处

addEntry(hash, key, value, i)

return null

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12480049.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存