java linkedhashmap 重复键值_java HashMap,TreeMap与LinkedHashMap的详解

本文详细介绍了Java中的HashMap, TreeMap和LinkedHashMap。HashMap使用哈希函数进行索引,键值对的顺序不确定;TreeMap通过内部的平衡树保持键的排序;LinkedHashMap则按插入顺序排序键值对。当遇到重复键时,HashMap的行为不确定,而TreeMap会覆盖原有的键值,LinkedHashMap则保留首次插入的键值。" 119217894,11074051,Kafka消费者详解与实战,"['网络', 'kafka', 'java', '中间件']

java HashMap,TreeMap与LinkedHashMap的详解

今天上午面试的时候 问到了Java,Map相关的事情,我记错了HashMap和TreeMap相关的内容,回来赶紧尝试了几个demo理解下

package Map;

import java.util.*;

public class HashMaps {

public static void main(String[] args) {

Map map = new HashMap();

map.put("a", "aaa");

map.put("b", "bbb");

map.put("c", "ccc");

map.put("d", "ddd");

Iterator iterator = map.keySet().iterator();

while (iterator.hasNext()) {

Object key = iterator.next();

System.out.println("map.get(key) is :" + map.get(key));

}

Hashtable tab = new Hashtable();

tab.put("a", "aaa");

tab.put("b", "bbb");

tab.put("c", "ccc");

tab.put("d", "ddd");

Iterator iterator_1 = tab.keySet().iterator();

while (iterator_1.hasNext()) {

Object key = iterator_1.next();

System.out.println("tab.get(key) is :" + tab.get(key));

}

TreeMap tmp = new TreeMap();

tmp.put("a", "aaa");

tmp.put("b", "bbb");

tmp.put("c", "ccc");

tmp.put("d", "ddd");

tmp.put("a", "aba");

Iterator iterator_2 = tmp.keySet().iterator();

while (iterator_2.hasNext()) {

Object key = iterator_2.next();

System.out.println("tmp.get(key) is :" + tmp.get(key));

}

LinkedHashMap linkedHashMap = new LinkedHashMap();

linkedHashMap.put("dasdsa", 1);

linkedHashMap.put("gdsf",2);

linkedHashMap.put("texvdfd", 3);

linkedHashMap.put("bdada", 4);

linkedHashMap.put("gdsf",3);

for(String temp : linkedHashMap.keySet()){

System.out.println(temp);

}

}

}

Map不同于 List, 底层使用 键值对的形式存储数据 Map.Entry是内部的一个子条目,Map的不同实现 对键值对的索引方案不同

HashMap 本身是用hash函数对键值做索引   我们不能确定最后键值的顺序

但是存在一个有趣的现象 就是在以Integer作为键值对的时候,当位数为1位时   键值是按照从小到大排的,位数上升到两位的时候 就可能存在问题

TreeMap  内部存在着一个平衡树来存储着键值索引,TreeMap 把键值按照比较函数排序,我推测内部是可能存在着一个AVLtree

LinkedHashMap   这个存在着一个特性是,键值对是按照插入顺序排序的,如果存在着重复插入,以首次插入的顺序来记,网上的一种说法是该结构内部存在着2重hash

一个解决顺序问题,一个解决存储问题,正确性待确认

HashMap和TreeMap  是最常用的两种Map结构,  一般来说HashMap的效率比较高,也最为常见,如果我们需要键值有序的话,我们才会用到TreeMap

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值