hashmap遍历

JAVA基础——集合类汇总

醉酒当歌 提交于 2020-03-29 20:24:48
一、集合与数组 数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。 集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。 二、层次关系 如图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口 Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是Set和List。Set中不能包含重复的元素。List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。 Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。Map不能包含重复的key,但是可以包含相同的value。 Iterator,所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法: 1.hasNext()是否还有下一个元素。 2.next()返回下一个元素。 3.remove()删除当前元素。 三、几种重要的接口和类简介 1、List(有序、可重复) List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时

Java中五种遍历HashMap的方式

一个人想着一个人 提交于 2020-03-21 08:13:18
import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class Java8Template { public static void main(String[] args) { Map<String,Integer>items=new HashMap<>(); items.put("A",10); items.put("B",20); items.put("C",30); items.put("D",40); items.put("E",50); items.put("F",60); //1.使用entrySet的迭代器 Iterator iter1=items.entrySet().iterator(); while(iter1.hasNext()){ Map.Entry<String,Integer> entry=(Map.Entry<String,Integer>)iter1.next(); System.out.println("Item :"+entry.getKey()+" Count:"+entry.getValue()); } //2.使用keySet的迭代器 Iterator iter2=items.keySet().iterator(); while

Java中HashMap遍历的两种方式

笑着哭i 提交于 2020-03-21 08:10:30
[转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml第一种:  Map map = new HashMap();  Iterator iter = map.entrySet().iterator();  while (iter.hasNext()) {  Map.Entry entry = (Map.Entry) iter.next();  Object key = entry.getKey();  Object val = entry.getValue();  }  效率高,以后一定要使用此种方式!第二种:  Map map = new HashMap();  Iterator iter = map.keySet().iterator();  while (iter.hasNext()) {  Object key = iter.next();  Object val = map.get(key);  }  效率低,以后尽量少使用! HashMap的遍历有两种常用的方法,那就是使用keyset及entryset来进行遍历,但两者的遍历速度是有差别的,下面请看实例:  public class HashMapTest {  public static void main(String

集合框架系列 Map(十):HashMap

柔情痞子 提交于 2020-03-18 18:17:13
目录 1 概述 2 原理 3 源码分析  3.1 构造方法   3.1.1 构造方法分析   3.1.2 初始容量、负载因子、阈值  3.2 查找  3.3 遍历  3.4 插入   3.4.1 插入逻辑分析   3.4.2 扩容机制   3.4.3 链表树化、红黑树链化与拆分  3.5 删除  3.6 其他细节  3.7 总结 1. 概述 本篇文章我们来聊聊大家日常开发中常用的一个集合类 - HashMap 。HashMap 最早出现在 JDK 1.2中,底层基于散列算法实现。HashMap 允许 null 键和 null 值,在计算哈键的哈希值时,null 键哈希值为 0。HashMap 并不保证键值对的顺序,这意味着在进行某些操作后,键值对的顺序可能会发生变化。另外,需要注意的是,HashMap 是非线程安全类,在多线程环境下可能会存在问题。 在本篇文章中,我将会对 HashMap 中常用方法、重要属性及相关方法进行分析。需要说明的是,HashMap 源码中可分析的点很多,本文很难一一覆盖,请见谅。 2. 原理 上一节说到 HashMap 底层是基于散列算法实现,散列算法分为散列再探测和拉链式。HashMap 则使用了拉链式的散列算法,并在 JDK 1.8 中引入了红黑树优化过长的链表。数据结构示意图如下: 对于拉链式的散列算法,其数据结构是由数组和链表(或树形结构)组成

遍历java.util.Map

邮差的信 提交于 2020-03-16 20:20:04
只遍历key值 Map<Integer, Integer> map = new HashMap<>(134); for(int i = 0; i < 100; i++) { map.put(i, i + 1); } for(Integer integer : map.keySet()) { System.out.println(integer); } 只遍历value值 Map<Integer, Integer> map = new HashMap<>(134); for(int i = 0; i < 100; i++) { map.put(i, i + 1); } for(Integer integer : map.values()) { System.out.println(integer); } 同时遍历key和value 3.1 方法一: Map<Integer, Integer> map = new HashMap<>(134); for(int i = 0; i < 100; i++) { map.put(i, i + 1); } for(Map.Entry<Integer, Integer> entry : map.entrySet()) { System.out.println(entry.getKey() + "-" + entry.getValue()); }

编译原理——正规式转DFA算法概述

让人想犯罪 __ 提交于 2020-03-11 19:05:21
一、概念概述 给定一个单词,判断该单词是否满足我们给定的单词描述规则,需要用到编译原理中词法分析的相关知识,其中涉及到的两个很重要的概念就是正规式(Regular Expression)和有穷自动机(Finite Automata)。正规式是描述单词规则的工具,首先要明确的一点是所有单词组成的是一个无穷的集合,而正规式正是描述这种无穷集合的一个工具;有穷自动机则是识别正规式的一个有效的工具,它分为确定的有穷自动机(Deterministic Finite Automata,DFA)和不确定的有穷自动机(Nondeterministic Finite Automata,NFA)。对于任意的一个单词,将其输入正规式的初始状态,自动机每次读入一个字母,根据单词的字母进行自动机中状态的转换,若其能够准确的到达自动机的终止状态,就说明该单词能够被自动机识别,也就满足了正规式所定义的规则。而DFA与NFA之间的差异就是对于某一个状态S,输入一个字符a,DFA能够到达的下一个状态有且仅有一个,即为确定的概念,而NFA所能到达的状态个数大于或等于一个,即不确定的概念。因为NFA为不确定的,我们无法准确的判断下一个状态是哪一个,因此识别一个正规式的最好的方式是DFA。那么,如何为一个正规式构造DFA就成了主要矛盾,解决了这个问题,词法分析器就已经构造完成。从正规式到DFA需要通过两个过程来完成:  

Java学习入门-05 -集合浅析

萝らか妹 提交于 2020-03-08 18:06:09
集合数据结构体系框架 Collection接口是List/Set/Queue接口的父接口,其中定义的常用的操作方法有(注意此处笔记不完整,演示代码没有导包): 添加功能  i. boolean add(object obj)添加一个元素  ii. boolean addAll(Collection c)将集合c的全部元素添加到原集合元素后返回true  iii. 添加功能永远返回true 删除功能  i. void clear();移除所有元素  ii. boolean remove(Object o)移除一个元素  iii. boolean removeAll(Collection c)移除一个集合的元素,只要有一个被移除就返回true,改变原集合,删除原集合中和c中相同的元素  iv. 删除功能只有删除成功后才返回true 判断功能  i. boolean contain(object o)判断集合中是否包含指定的元素。  ii. boolean containsAll(Collection c)判断原集合中是否包含指定集合c的所有元素,有则true,  iii. boolean isEmpty()判断集合是否为空 获取功能  i. Iterator iterator()迭代器,集合的专用方式,实现遍历的功能  ii. Object next()获取当前元素,并移动到下一个位置

Java入门 - 高级教程 - 02.集合

妖精的绣舞 提交于 2020-03-08 07:42:20
原文地址: http://www.work100.net/training/java-collection.html 更多教程: 光束云 - 免费课程 集合 序号 文内章节 视频 1 概述 - 2 集合接口 - 3 集合实现类(集合类) - 4 集合算法 - 5 如何使用迭代器 - 6 如何使用比较器 - 7 总结 - 请参照如上 章节导航 进行阅读 1.概述 早在 Java 2 中之前,Java 就提供了特设类。比如: Dictionary , Vector , Stack , 和 Properties 这些类用来存储和操作对象组。 虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用 Vector 类的方式和使用 Properties 类的方式有着很大不同。 集合框架被设计成要满足以下几个目标: 该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性 对一个集合的扩展和适应必须是简单的 为此,整个集合框架就围绕一组标准接口而设计。你可以直接使用这些接口的标准实现,诸如: LinkedList , HashSet , 和 TreeSet 等,除此之外你也可以通过这些接口实现自己的集合。 从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(

Java 集合系列16之 HashSet详细介绍(源码解析)和使用示例

巧了我就是萌 提交于 2020-03-01 09:52:21
概要 这一章,我们对HashSet进行学习。 我们先对HashSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashSet。内容包括: 第1部分 HashSet介绍 第2部分 HashSet数据结构 第3部分 HashSet源码解析(基于JDK1.6.0_45) 第4部分 HashSet遍历方式 第5部分 HashSet示例 转载请注明出处: http://www.cnblogs.com/skywang12345/p/3311252.html 第1部分 HashSet介绍 HashSet 简介 HashSet 是一个 没有重复元素的集合 。 它是由HashMap实现的, 不保证元素的顺序 ,而且 HashSet允许使用 null 元素 。 HashSet是 非同步的 。如果多个线程同时访问一个哈希 set,而其中至少一个线程修改了该 set,那么它必须 保持外部同步。这通常是通过对自然封装该 set 的对象执行同步操作来完成的。如果不存在这样的对象,则应该使用 Collections.synchronizedSet 方法来“包装” set。最好在创建时完成这一操作,以防止对该 set 进行意外的不同步访问: Set s = Collections.synchronizedSet(new HashSet(...)); HashSet通过iterator()返回的

迭代器模式

99封情书 提交于 2020-02-27 08:27:22
迭代器是一种模式,它可以使得对于序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的。只要拿到这个对象,使用迭代器就可以遍历这个对象的内部. 1.Iterator Java提供一个专门的迭代器<<interface>>Iterator,我们可以对某个序列实现该interface,来提供标准的Java迭代器。Iterator接口实现后的功能是“使用”一个迭代器. 文档定义: [java] view plain copy Package java.util; public interface Iterator<E> { boolean hasNext(); //判断是否存在下一个对象元素 E next(); void remove(); } 2.Iterable Java中还提供了一个Iterable接口,Iterable接口实现后的功能是“返回”一个迭代器,我们常用的实现了该接口的子接口有: Collection<E>, Deque<E>, List<E>, Queue<E>, Set<E> 等.该接口的iterator()方法返回一个标准的Iterator实现。实现这个接口允许对象成为 Foreach 语句的目标。就可以通过Foreach语法遍历你的底层序列。 Iterable接口包含一个能够产生Iterator的iterator()方法