标签:dma 安全 hash表 保存 shm 元素 链表实现 结果 获取
java集合类是java.util 包中的重要内容。java集合框架包含了大量集合接口以及这些接口的实现类和操作他们的算法。
java集合框架图
主要提供的数据结构
List
又称有序的Collection。它按照对象的进入顺序保存对象,可以对列表中的每个元素的出入和删除元素位置进行精确的控制。同时,它可以保存重复的对象。
LinkedList、ArrayList、Vector都实现了List接口。Set
Set 是数学意义上的集合。集合中元素不可重复。因此存入set的每个元素都必须通过equals()方法来确定对象的唯一性。
Set 接口有两实现类,HashSet和TreeSet其中TreeSet 实现了SrotedSet接口所以TreeSet是有序的。Map
Map 提供一个从键映射到值得数据结构。它用于保存键值对,其中值可以重复,但是键一定唯一,不能重复。Java类库中有多个实现该接口的类:HashMap、LinkedHashMap、TreeMap、WeakHashMap、IdentityHashMap。
调用Key的hashCode()方法生成一个hash值h1。
- 如果这个h1在HashMap中不存在,那么直接将<key,value>添加到HashMap中。
- 如果这个h1已经存在了那么找出HashMap中所有Hash值为h1的key。
分别调用equals()方法判断当前添加的key是否与已经存在的key值相同
如果相同,说明当前的Key已经存在。HashMap会使用新的value覆盖原有的value。
如果没有相同,说明当前的Key不存在。HashMap会创建新的映射关系。Hash冲突的解决。(当新增的key的Hash值在HashMap中存在时,就会产生冲突。一般有开放地址法、再Hash法、链地址法等解决Hash冲突问题。
HashMap使用的是链地址法来解决冲突的
- 调用hashCode()方法获取Key的Hash值h,确定键为Key的所有值存储的首地址。
- 如果Key的值有多个,程序会遍历所有结果,并通过调用key的equals()方法来判断key的内容是否相等。只有当equals()方法的返回值为true时,对应的value才是正确值。
遍历方式实现不同:HashTable和HashMap都是用了迭代器Iterator 1。
HashTable中还使用了Enumeration方式。
数组的初始化不同:HashTable默认为11,扩容为(old*2+1),HashMap 默认为16,扩容为(old*2)
LinkedHashMap 是HashMap的一个子类,如果需要输入和输出顺序相同则使用LinkedHashMap可以实现。(LinkedHashMap还可以按照读取顺序排序)
同步意味着,在同一时刻中只有一个线程可以修改Hash表,任何线程在执行HashTable的更新操作前都要获取对象锁,其他线程则等待线程锁的释放。
HashMap以使用
Map m = Collections.synchronizedMap(new HashMap());
来达到同步的效果。
Iterator是一个对象,它的工作是遍历并选择序列中的对象,它提供了一种访问访问一个容器对象中的各个元素。而又不必暴露该对象内部细节的方法。?
标签:dma 安全 hash表 保存 shm 元素 链表实现 结果 获取
原文地址:https://www.cnblogs.com/winstonehome/p/11664633.html