>public >class Test { >public >static >void main(String[] args) { List list = >new ArrayList(); Map<String, String> map = >new HashMap<String, String>(); map.put("1", "value1"); map.put("2", "value2"); map.put("3", "value3"); >//>第一种:普遍使用,二次取值 System.out.println("通过Map.keySet遍历key和value:"); >for (String key : map.keySet()) { System.out.println("key= " + key + " and value= " + map.get(key)); } >//>第二种:推荐,尤其是容量大时 System.out.println("通过Map.entrySet遍历key和value"); >for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println(entry); System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue()); } } }
附:
1、JDK.7是基于数组加单链表实现(为什么不要双链表)
首先,用链表是为了解决hash冲突。
单链表能实现为什么要用双链表呢?(双链表需要更大的存储空间)
2、为什么要用红黑树,不是平衡二叉树?
插入效率比平衡二叉树高,查询效率比普通二叉树高。所以选择性能相对折中的红黑树。
3、重写对象的equals时一定需要重写hashcode,为什么?
判断两个对象是否相同,首先判断两个对象的hashcode是否相等,若不相等,直接返回false;若相等,使用equals判断。
即equals判断相等,则hashcode一定相等,hashcode相等,他们并不一定相同。
4、为什么默认加载因子为0.75?
调低负载因子时,HashMap 所能容纳的键值对数量变少。扩容时,重新将键值对存储新的桶数组里,键的键之间产生的碰撞会下降,链表长度变短。此时,HashMap 的增删改查等操作的效率将会变高,这里是典型的拿空间换时间。
相反,如果增加负载因子(负载因子可以大于1),HashMap 所能容纳的键值对数量变多,空间利用率高,但碰撞率也高。这意味着链表长度变长,效率也随之降低,这种情况是拿时间换空间。至于负载因子怎么调节,这个看使用场景了。
一般情况下,我们用默认值就可以了。大多数情况下0.75在时间跟空间代价上达到了平衡所以不建议修改。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx