hashmap遍历

HashMap了解吗?

怎甘沉沦 提交于 2019-12-01 07:23:15
HashCode() HashMap 底层实现 HashMap 的长度为什么默认初始长度是16,并且每次resize()的时候,长度必须是2的幂次方? HashMap 死链问题 Java 8 与 Java 7对比 为什么要使用红黑树? 说说hashmap如何处理碰撞的,或者说说它的扩容?   一,简介 (1)桶(capacity)容量,即数组长度:DEFAULT_INITIAL_CAPACITY=1<<4;默认值为16,即在不提供有参构造的时候,声明的hashmap的桶容量; (2)MAXIMUM_CAPACITY = 1 << 30;   极限容量,表示hashmap能承受的最大桶容量为2的30次方,超过这个容量将不再扩容,让hash碰撞起来吧! (3)static final float DEFAULT_LOAD_FACTOR = 0.75f;   负载因子(loadfactor,默认0.75),负载因子有个奇特的效果,表示当当前容量大于(size/)时,将进行hashmap的扩容,扩容一般为扩容为原来的两倍。 (4)int threshold;阈值(yu)   阈值算法为capacity*loadfactory,大致当map中entry数量大于此阈值时进行扩容(1.8) (5)transient Entry<K,V>[] table = (Entry<K,V>[])

Map集合循环遍历的几种方式

筅森魡賤 提交于 2019-12-01 05:33:39
package cn.jdbc.test; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; /** * Map 集合的循环遍历 * @data 2018.1.21 * */ public class TestMap { public static void main(String[] args) { Map<String, Object> map = new HashMap<String, Object>(); map.put("aaa", 111); map.put("bbb", 222); map.put("ccc", 333); map.put("ddd", 444); //Map集合循环遍历方式一 System.out.println("第一种:通过Map.keySet()遍历key和value:"); for(String key:map.keySet()){//keySet获取map集合key的集合 然后在遍历key即可 String value = map.get(key).toString();// System.out.println("key:"+key+" vlaue:"+value); } /

史上最全HashMap遍历方式

試著忘記壹切 提交于 2019-11-30 21:21:15
java Hashmap Map TreeMap 的几种遍历方式,全网最全,全网最强 package Collec2; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class Test1 { public static void main(String[] args) { HashMap<Student, String> hashmap_88 = new HashMap<Student, String>(); hashmap_88.put(new Student("张三", 23), "北京"); hashmap_88.put(new Student("李四", 24), "南京"); HashMap<Student, String> hashmap_99 = new HashMap<Student, String>(); hashmap_99.put(new Student("王五", 23), "上海"); hashmap_99.put(new Student("赵六", 24), "深圳"); HashMap<HashMap<Student, String>,

fail-fast(快速失败)机制和fail-safe(安全失败)机制的介绍和区别

流过昼夜 提交于 2019-11-30 19:42:15
fail-fast和fail-safe的区别: fail-safe允许在遍历的过程中对容器中的数据进行修改,而fail-fast则不允许。 fail-fast ( 快速失败 ) fail-fast:直接在容器上进行遍历,在遍历过程中,一旦发现容器中的数据被修改了,会立刻抛出ConcurrentModificationException异常导致遍历失败。java.util包下的集合类都是快速失败机制的, 常见的的使用fail-fast方式遍历的容器有HashMap和ArrayList等。 在使用迭代器遍历一个集合对象时,比如增强for,如果遍历过程中对集合对象的内容进行了修改(增删改),会抛出ConcurrentModificationException 异常. fail-fast的出现场景 在我们常见的java集合中就可能出现fail-fast机制,比如ArrayList,HashMap。在多线程和单线程环境下都有可能出现快速失败。 1、单线程环境下的fail-fast: ArrayList发生fail-fast例子: public static void main(String[] args) { List<String> list = new ArrayList<>(); for (int i = 0 ; i < 10 ; i++ ) { list.add(i + ""); }

Map的常用方法及其遍历方式

早过忘川 提交于 2019-11-30 09:40:30
Map存储元素使用put方法,Collection使用add方法 常用方法 1、添加: 1、V put(K key, V value) (可以相同的key值,但是添加的value值会覆 盖前面的,返回值是前一个,如果没有就返回null) 2、putAll(Map<? extends K,? extends V> m) 从指定映射中将所有映射关 系复制到此映射中(可选操作)。 2、删除 1、remove() 删除关联对象,指定key对象 2、clear() 清空集合对象 3、获取 1:value get(key); 可以用于判断键是否存在的情况。当指定的键不存在的时候,返 回的是null。 3、判断: 1、boolean isEmpty() 长度为0返回true否则false 2、boolean containsKey(Object key) 判断集合中是否包含指定的key  3、boolean containsValue(Object value) 判断集合中是否包含指定的value  4、长度:Int size()   map有这几种遍历方式 import java.util.*; public class Test{ public static void main(String[] args) { Map<String, String> map = new HashMap

面试(五)

北城余情 提交于 2019-11-30 07:16:46
Java集合类框架的最佳实践有哪些? 元素的大小是固定的,而且能事先知道,用Array而不是ArrayList。 如果能估计出存储的元素的数目,可以设置初始容量来避免重新计算hash值或者是扩容。 为了类型安全,可读性和健壮性的原因多使用泛型。同时,使用泛型还可以避免运行时的ClassCastException。 使用JDK提供的不变类(immutable class)作为Map的键可以避免为我们自己的类实现hashCode()和equals()方法。 底层的集合实际上是空的情况下,返回长度是0的集合或者是数组,不要返回null。 Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使用,Java1.2提出了囊括所有集合接口、实现和算法的集合框架。在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久。它还包括在Java并发包中,阻塞接口以及它们的实现。 集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类。 (2)随着使用经过严格测试的集合框架类,代码质量会得到提高。 (3)通过使用JDK附带的集合类,可以降低代码维护成本。 (4)复用性和可操作性。 集合框架中的泛型有什么优点? Java1.5引入了泛型

Map的遍历

别来无恙 提交于 2019-11-30 02:51:09
import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * Description:Map遍历的map.keyset和map.entryset * @author 李XX2019年9月19日 */ public class Map遍历 { public static void main(String[] args) { Map<String,String> map = new HashMap<String,String>(); map.put("1", "value1"); map.put("2", "value2"); map.put("3", "value3"); map.put("4", "value4"); map.put("5", "value5"); System.out.println("通过map.keySet遍历key和value:"); for(String key:map.keySet()) { System.out.println("Key:"+key+" Value:"+map.get(key)); } System.out.println("\n通过map.entrySet遍历key和value:"); for(Map.Entry<String,

Java集合必会14问(精选面试题整理)

一世执手 提交于 2019-11-30 01:07:29
前言.... 前言:把这段时间复习的关于集合类的东西整理出来,特别是HashMap相关的一些东西,之前都没有很注意1.7 ->> 1.8的变化问题,但后来发现这其实变化挺大的,而且很多整理的面试资料都没有更新(包括我之前整理的...) 1)说说常见的集合有哪些吧? 答:Map接口和Collection接口是所有集合框架的父接口: Collection接口的子接口包括:Set接口和List接口 Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等 Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等 List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector等 2)HashMap与HashTable的区别? 答: HashMap没有考虑同步,是线程不安全的;Hashtable使用了synchronized关键字,是线程安全的; HashMap允许K/V都为null;后者K/V都不允许为null; HashMap继承自AbstractMap类;而Hashtable继承自Dictionary类; 3)HashMap的put方法的具体流程? 图引用自:https://blog.csdn.net/u011240877/article

Thinking in Java——集合(Collection)

眉间皱痕 提交于 2019-11-29 20:36:19
一、ArrayList的使用(略) 二、容器的基本概念 (一)、Collection是集合类的基本接口 主要方法: public interface Collection<E>{ boolean add(E element);//向集合中添加元素,E代表泛型 Iterator<E> iterator();//返回实现了Iterator接口的对象 } 关于:Iterator之后讲解。 (二)、实现了Collection的子类: List:按照顺序插入保存元素。 Set:该容器内不能有重复的元素 Queue:按照队列的规则决定对象的顺序 (三)、Map接口 定义:一组成对的“键值对”对象,使用key查找value 注:Map这是单独的接口,不属于Collection,所以以map结尾的类都不属于Collection (四)、根据上诉分析使用容器 1、ArrayList向上转型为Collection,并通过Collection添加处理数据。(运用到的技术:父类引用指向子类对象,调用子类的方法) public class UpToCollection { public static void main(String [] args){ ArrayList<Integer> arrayList = new ArrayList(); for(int i=0; i<5; ++i){

Java集合类

夙愿已清 提交于 2019-11-29 20:35:41
Java集合类的用途是 保存对象 ,根据其概念的不同可以划分为两个不同的类别: Collection :一个独立元素的序列,这些元素都服从一条或多条规则。 List 必须按照插入的顺序保存元素, Set 不能有重复元素, Queue 按照队列规则来确定对象顺序。 Map :保存一组成对的 键值对 且允许使用键来查找值。映射表允许我们使用作为 键 的对象来查找对应的 值 对象,在实际编程中的应用十分广泛。 List List 可以将元素维护在特定的序列中。 List 接口在 Collection 的基础上添加了大量的方法,使得可以在 List 的中间插入和移除元素。 有两种类型的 List : ArrayList :基于可变长度数组实现的 List ,长于随机访问其中的元素,但增删元素时效率较低。 LinkedList :基于链表实现的 List ,随机访问相对较慢,但增删元素效率高且对首尾操作方便。 Set Set 不保存重复的元素。如果试图将相同对象的多个实例添加到 Set 中,那么它不会保存后添加的元素。 Set 具有和 Collection 完全一样的接口,因此完全没有任何额外的功能。 常用有三种类型的 Set : HashSet :使用散列函数储存元素,为快速查找进行了专门的优化,所以拥有最快的查找速度。当 hashCode() 和 equals(Object object