当需要对元素进行计数时,HashMap非常有用,如下例子,统计一个字符串中每个字符出现的次数:

package simplejava;

import java.util.HashMap;
import java.util.Map.Entry; public class Q12 { public static void main(String[] args) {
HashMap<Integer, Integer> countMap = new HashMap<Integer, Integer>();
// .... a lot of a’s like the following String chars = "abcabcabcghgk"; for(int i = 0; i < chars.length(); i++){
int a = chars.charAt(i);
if (countMap.keySet().contains(a)) {
countMap.put(a, countMap.get(a) + 1);
} else {
countMap.put(a, 1);
}
} for(Entry<Integer, Integer> e : countMap.entrySet()){
System.out.println((char)(int)e.getKey() + " " + e.getValue());
} } }

输出结果:

g 2
b 3
c 3
a 3
k 1
h 1

HashMap遍历

        Map<Integer, Integer> mp = new HashMap<Integer, Integer>();
Iterator it = mp.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry) it.next();
System.out.println(pairs.getKey() + " = " + pairs.getValue());
} Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}

打印HashMap的元素

    public static void printMap(Map mp) {
Iterator it = mp.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry) it.next();
System.out.println(pairs.getKey() + " = " + pairs.getValue());
it.remove(); // avoids a ConcurrentModificationException
}
}

根据键值对的value排序

以下代码往TreeMap的构造函数传入一个比较器,来对map进行排序:

package simplejava;

import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap; class ValueComparator implements Comparator<String> {
Map<String, Integer> base; public ValueComparator(Map<String, Integer> base) {
this.base = base;
} public int compare(String a, String b) {
if (base.get(a) >= base.get(b)) {
return -1;
} else {
return 1;
} // returning 0 would merge keys
}
} public class Q12 {
public static void printMap(Map mp) {
Iterator it = mp.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry) it.next();
System.out.println(pairs.getKey() + " = " + pairs.getValue());
it.remove(); // avoids a ConcurrentModificationException
}
} public static void main(String[] args) {
HashMap<String, Integer> countMap = new HashMap<String, Integer>();
// add a lot of entries
countMap.put("a", 10);
countMap.put("b", 20);
ValueComparator vc = new ValueComparator(countMap);
TreeMap<String, Integer> sortedMap = new TreeMap<String, Integer>(vc);
sortedMap.putAll(countMap);
printMap(sortedMap); } }

虽然有很多种方法来对HashMap进行排序,但以上这种方法在stackoverflow中是最被推崇的;

注:使用了一个比较器Comparator对TreeMap排序,该比较器比较key的方式是取出key对应的value进行大小比较;

译文地址:http://www.programcreek.com/2013/04/frequently-used-methods-of-java-hashmap/

HashMap常用方法的更多相关文章

  1. map接口、hashmap常用方法

    注意:map中键不能重复(是否重复是根据equals方法判断),否则新的会覆盖为旧的 范例: public class TestMap { public static void main(String ...

  2. HashMap常用方法(简版)

    HashMap继承自Map,是一个散列表,它的存储形式是键-值对,键值对的类型可以不一样,这是它相较数组方便的一点. 1.put()方法 哈希表.put(key,value): 该方法用于将键值对加入 ...

  3. 集合框架源码学习之HashMap(JDK1.8)

    目录: 0-1. 简介 0-2. 内部结构分析 0-2-1. JDK18之前 0-2-2. JDK18之后 0-3. LinkedList源码分析 0-3-1. 构造方法 0-3-2. put方法 0 ...

  4. HashMap源码及原理

    HashMap 简介 底层数据结构分析 JDK1.8之前 JDK1.8之后 HashMap源码分析 构造方法 put方法 get方法 resize方法 HashMap常用方法测试 感谢 changfu ...

  5. 高强度学习训练第十四天总结:HashMap

    HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一. JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap ...

  6. java:容器/集合(Map(HashMap,TreeMap)Collection和Collections,(Collection-value();)

    *Map接口:采用是键值对的方式存放数据.无序 HashMap: *常见的实现类: *--HashMap:基于哈希表的 Map 接口的实现. *常用的构造方法: * HashMap()构造一个具有默认 ...

  7. ht-4 hashmap特性

    一.hashmap底层原理: hashmap调用默认构造方法会产生一个默认底层是长度为16的Entry数组,首先调用key的hasCode()方法来得到一个整数, int hash = hash(ke ...

  8. HashMap基础知识

    HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一. JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap ...

  9. Leetcode1/242/383-HashMap常用方法以及遍历排序方式

    HashMap常用方法以及遍历排序方式 常用方法 map.containsKey() map.put() map1.equals(map2) 遍历方式 Iterator<Map.Entry< ...

随机推荐

  1. oracle 查询周的第一天日期

    项目的开发中需要用到一个查询周的第一天日期的函数 搜索N久很难找到解决的方法 只要自己写一个先用着 代码如下 a_week格式为 'YYYYIW' 如 '200801'表示2008年的第一周 周使用I ...

  2. 炉石传说 C# 开发笔记 (法术篇)

    炉石的设计,最核心的内容是法术效果. 法术卡牌,无疑是法术的集中体现,但是,法术效果除了在法术卡牌之外,也不除不在. 随从的战吼,亡语,奥秘的揭示等等都是法术效果的体现. 法术卡牌在炉石里面有很多种( ...

  3. Nlog 记录日志到 sqlite

    最近研究了一下Nlog这个日志框架,这里记录一下如何将日志写到sqlite中. 第一步:使用NuGet获取Nlog和Sqlite 第二步:在sqlite中创建一个database,这里我用了SQLit ...

  4. 【Java每日一题】20161012

    package Oct2016; public class Ques1012 { public static void main(String[] args) { System.out.println ...

  5. MySQL带参数的存储过程小例子

    http://wwty.iteye.com/blog/698239 mysql存储过程也提供了对异常处理的功能:通过定义HANDLER来完成异常声明的实现 语法如下: DECLARE handler_ ...

  6. 使用PDF.JS在线查看PDF

    过程简单粗暴. 第一步:下载源码https://github.com/mozilla/pdf.js 第二步:将源码拷贝进项目中,可以新建一个PDFShow文件夹存放代码 第三步:修改viewer.js ...

  7. PostgreSQL类型转换

    1.int装string select CAST (1234 AS text) select to_char(1234,’999‘) 2.string转int select cast('999' as ...

  8. GC之详解CMS收集过程和日志分析

    2016-08-23   关于GC的算法和垃圾收集器的种类就暂且不说了,网上有大把的资料供参考 话题引入 让我们先简单的看下整个堆年轻代和年老代的垃圾收集器组合(以下配合java8完美支持,其他版本可 ...

  9. Git远程和分支管理

    一.远程       Git是分布式版本控制系统,最重要的优点就是远程仓库托管代码.不用自己搭建一个服务器,在github上面注册一个账户就可免费获取远程仓库.      首先需要先在github上面 ...

  10. struts工程建立配置细节

    ActionForm ActionForm是用于存放表单提交的数据. 1.一个action是否必须配置一个actionForm,可以没有2.一个action是否可以配置多个表单?不可以,最多一个 在j ...