hashmap遍历

Java学习里程-----Java基础_8数组与集合

落花浮王杯 提交于 2019-12-30 03:01:36
一、数组 数组我们上一讲中说数据结构的时候有提到过,但是那个是一维数组,相应的我们还有多维数组。下面我们来说说数组如何添加、如何遍历。 我们可以使用for循环,循环的条件是不超过数组的长度。数组的长度是3,我们可以用数组点length这个获取到数组的长度。 这里我们还得说一个重要的东西。再来看代码 可能有一些同学看出来了,当a的值是0的时候,i[0] = 1 。当a的值是1的时候,i[1]的值是2。 数组中,第一个元素的开始位置是0,而不是1,为啥要这么定义啊,为啥不从1开始?这个就是我前面说的,这东西是外国人定义的,不是我们中国人定义的,人家就是喜欢从0开始,没办法,我们就只能也是从0开始。 当然,除去这样的用for循环来遍历,我们再引入另外一种循环,叫foreach循环,这个之所以前面没有说,是因为怕你们接受不了,所以我就放在数组这里了。 foreach 循环用法是这样滴: 看,是不是方便许多?大家可以练习一下,我来解释这些个东西。 for(int a : i)foreach没有去从新弄个关键字,而是用的for这个关键字,然后括号中写的就是要遍历的对象。 int 你要遍历的数组是int类型的数组,所以就使用int,如果数组是char,那么这里的int 需要换成char。 a 这个是给每一个循环出来的结果赋值为a,第一次循环开始执行的时候,将i[0]赋值给a变量,那么a就等于i

JAVA双列集合HashMap

有些话、适合烂在心里 提交于 2019-12-26 22:45:46
                     HashMap 双列集合HashMap是属于java集合框架3大类接口的Map类, Map接口储存一组成对的键-值对象,提供key(键)到value(值)的映射.Map中的key不要求有序,不允许重复.value同样不要求有序,但允许重复.   Iterator接口是负责定义访问和遍历元素的接口 1. 使用Iterator迭代器缺点: 1. ListIterator有add()方法,可以向List中添加对象,而Iterator不能 2. ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。 3. ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。 4. 都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。 2.Map接口 遍历方式: 方式一:迭代器方式,map.keySet(); Import java.util.Map; Import java.util.HashMap; Map map

Java面试篇:手撕hashmap与ArrayList,LinkedList。

◇◆丶佛笑我妖孽 提交于 2019-12-26 09:56:26
这两个月来第一次8点下班,没有到12点甚至有点不习惯,马上就要到跳槽旺季,那么我给大家整理一套最常问的几个集合面条题,废话不多说,直接进入正题。 一、HASHMAP 1.如果想要了解hashmap首先要了解其数据结构 ①.hashmap数据结构是什么? hashmap数据结构中有数组和链表来实现对数据的存储 数组:数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1),随机读取效率很高。因为数组是连续的,知道每一个数据的内存地址,可以直接找到给定地址的数据,但是插入数据和删除数据效率低,插入数据时,这个位置后面的数据在内存中都要向后移。所以数组的特点是:寻址容易,插入和删除困难; 链表:链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N),链表的插入删除元素相对数组较为简单,不需要移动元素,且较为容易实现长度扩充,但是寻找某个元素较为困难。所以链表的特点是:寻址困难,插入和删除容易。 哈希表:那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表。哈希表((Hash table)既满足了数据的查找方便,同时不占用太多的内容空间,使用也十分方便。 哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法—— 拉链法,我们可以理解为“链表中的数组“

Java_集合面试题

亡梦爱人 提交于 2019-12-25 06:07:07
Java_集合面试题 0.链表,队列和栈的区别? 链表是一种存储结构,指得是存储时候除了要存储数据元素之外,还要用数据元素一起的另外空间存储数据元素的关系。 队列和栈都是线性表,属于逻辑结构范畴,都是访问点受到限制,并且限制在线性表端点的线性表。 栈被限定为在线性表中的同一个(唯一一个的)端点插入删除 队列被限定为在线性表的一端插入,另外一个端点删除 栈和队列也可以用链表来实现,分别称为链栈和链队列 1. ArrayList ArrayList是基于数组实现的,最大长度不会超过数组的长度2147483647(最大值是int的最大值是,2的31次方减去1 ).如果业务中可能存在超过这个长度的数据,使用LinkedArrayList 3.HashMap Java中的HashMap是以键值对(key-value)的形式存储元素的。HashMap需要一个hash函数,它使用hashCode()和equals()方法来向集合/从集合添加和检索元素。当调用put()方法的时候,HashMap会计算key的hash值,然后把键值对存储在集合中合适的索引上。如果key已经存在了,value会被更新成新值。 HashMap的一些重要的特性是它的容量(capacity),负载因子(load factor)和扩容极限(threshold resizing)。 4.HashMap和HashTable的区别

jdk1.8源码分析之HashMap

冷暖自知 提交于 2019-12-24 11:53:00
原文链接:https://segmentfault.com/a/1190000012926722?utm_source=tag-newest 1.概述 本篇文章我们来聊聊大家日常开发中常用的一个集合类 - HashMap 。HashMap 最早出现在 JDK 1.2中,底层基于散列算法实现。HashMap 允许 null 键和 null 值,在计算哈键的哈希值时,null 键哈希值为 0。HashMap 并不保证键值对的顺序,这意味着在进行某些操作后,键值对的顺序可能会发生变化。另外,需要注意的是,HashMap 是非线程安全类,在多线程环境下可能会存在问题。 在本篇文章中,我将会对 HashMap 中常用方法、重要属性及相关方法进行分析。需要说明的是,HashMap 源码中可分析的点很多,本文很难一一覆盖,请见谅。 2.原理 上一节说到 HashMap 底层是基于散列算法实现,散列算法分为散列再探测和拉链式。HashMap 则使用了拉链式的散列算法,并在 JDK 1.8 中引入了红黑树优化过长的链表。数据结构示意图如下: 对于拉链式的散列算法,其数据结构是由数组和链表(或树形结构)组成。在进行增删查等操作时,首先要定位到元素的所在桶的位置,之后再从链表中定位该元素。比如我们要查询上图结构中是否包含元素 35 ,步骤如下: 定位元素 35 所处桶的位置, index = 35 %

Java中ArrayList与HashMap的遍历

喜你入骨 提交于 2019-12-24 08:35:49
1.ArrayList遍历 package com.test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ArrayListDemo { public static void main(String args[]){    List<String> list = new ArrayList<String>();    list.add("luojiahui");    list.add("luojiafeng");    //方法1    Iterator it1 = list.iterator();    while(it1.hasNext()){    System.out.println(it1.next());    }    //方法2    for(Iterator it2 = list.iterator();it2.hasNext();){    System.out.println(it2.next());    }    //方法3    for(String tmp:list){    System.out.println(tmp);    }    //方法4    for(int i = 0;i < list.size(

java 8 Hashmap深入解析 —— put get 方法源码

主宰稳场 提交于 2019-12-23 18:30:53
本文为原创博文,转载请注明出处,侵权必究! 每个java程序员都知道,HashMap是java中最重要的集合类之一,也是找工作面试中非常常见的考点,因为HashMap的实现本身确实蕴含了很多精妙的代码设计。   对于普通的程序员,可能仅仅能说出HashMap线程不安全,允许key、value为null,以及不要求线程安全时,效率上比HashTable要快一些。稍微好一些的,会对具体实现有过大概了解,能说出HashMap由数组+链表+RBT实现,并了解HashMap的扩容机制。但如果你真的有一个刨根问题的热情,那么你肯定会想知道具体是如何一步步实现的。HashMap的源码一共2000多行,很难在这里每一句都说明,但这篇文章会让你透彻的理解到我们平时常用的几个操作下,HashMap是如何工作的。   要先提一下的是,我看过很多讲解HashMap原理的文章,有一些讲的非常好,但这些文章习惯于把源代码和逻辑分析分开,导致出现了大段的文字讲解代码,阅读起来有些吃力和枯燥。所以我想尝试另一种风格,将更多的内容写进注释里,可能看起来有些啰嗦,但对于一些新手的理解,应该会有好的效果。 HashMap结构   首先是了解HashMap的几个核心成员变量(以下均为jdk源码): 1   transient Node<K,V>[] table;        //HashMap的哈希桶数组

图解LinkedHashMap原理

泄露秘密 提交于 2019-12-20 19:03:15
1 前言 LinkedHashMap继承于HashMap,如果对HashMap原理还不清楚的同学,请先看上一篇: 图解HashMap原理 2 LinkedHashMap使用与实现 先来一张LinkedHashMap的结构图,不要虚,看完文章再来看这个图,就秒懂了,先混个面熟: LinkedHashMap结构.png 2.1 应用场景 HashMap是无序的,当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了。 Map < String , String > hashMap = new HashMap < String , String > ( ) ; hashMap . put ( "name1" , "josan1" ) ; hashMap . put ( "name2" , "josan2" ) ; hashMap . put ( "name3" , "josan3" ) ; Set < Entry < String , String >> set = hashMap . entrySet ( ) ; Iterator < Entry < String , String >> iterator = set . iterator ( ) ; while ( iterator . hasNext ( ) ) { Entry entry =

java集合常见问题

别等时光非礼了梦想. 提交于 2019-12-19 00:09:29
Java集合 常见的集合问题 HashMap与HashTable的区别 HashMap的put方法的具体流程? HashMap 解决哈希冲突 什么是哈希? 什么是哈希冲突? HashMap为什么不直接使用hashCode()处理后的哈希值直接作为table的下标? HashMap在JDK1.7和JDK1.8中有哪些不同? 为什么HashMap中String、Integer这样的包装类适合作为K? ConcurrentHashMap和Hashtable的区别? Java集合的快速失败机制 “fail-fast” ArrayList 和 Vector 的区别? ArrayList和LinkedList的区别? Array 和 ArrayList 有什么区别?什么时候该应 Array 而不是 ArrayList 呢? HashSet是如何保证数据不可重复的? BlockingQueue是什么? 转自 https://zhuanlan.zhihu.com/p/82714518 常见的集合问题 Map 接口和 Collection 接口是所有集合框架的父接口: Collection 接口的子接口包括: Set 接口和 List 接口 Map 接口的实现类主要有: HashMap 、 TreeMap 、 Hashtable 、 ConcurrentHashMap 以及 Properties 等

Map的遍历

别来无恙 提交于 2019-12-16 22:48:06
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,