Java集合框架—Map
Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
1,添加。
put(K key, V value) 
putAll(Map<? extends K,? extends V> m) 
2,删除。
clear() 
remove(Object key) 
3,判断。
containsValue(Object value) 
containsKey(Object key) 
isEmpty() 
4,获取。
get(Object key) 
size() 
values() 
entrySet() 
keySet() 
Map
|--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
|--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代
jdk1.2.出现,效率高。
|--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
map集合的两种取出方式:
1,Set<k> keySet:将map中所有的键存入到Set集合。因为set具备迭代器。
所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。
Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。
2,Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,
而这个关系的数据类型就是:Map.Entry
Entry其实就是Map中的一个static内部接口。
为什么要定义在内部呢?
        因为只有有了Map集合,有了键值对,才会有键值的映射关系。关系属于Map集合中的一个内部事物。而且该事物在直接访问Map集合中的元素。
关系如下代码所示:
interface Map
{
public static interface Entry
{
public abstract Object getKey();
public abstract Object getValue(); }
} class HashMap implements Map
{
class Hahs implements Map.Entry
{
public Object getKey(){}
public Object getValue(){}
} }
练习:
"sdfgzxcvasdfxcvdf"获取该字符串中的字母出现的次数。
希望打印结果:a(1)c(2).....
通过结果发现,每一个字母都有对应的次数。说明字母和次数之间都有映射关系。
注意了,当发现有映射关系时,可以选择map集合。因为map集合中存放就是映射关系。
什么使用map集合呢?
当数据之间存在这映射关系时,就要先想map集合。
思路:
1,将字符串转换成字符数组。因为要对每一个字母进行操作。
2,定义一个map集合,因为打印结果的字母有顺序,所以使用treemap集合。
3,遍历字符数组。
将每一个字母作为键去查map集合。
如果返回null,将该字母和1存入到map集合中。
如果返回不是null,说明该字母在map集合已经存在并有对应次数。
那么就获取该次数并进行自增。,然后将该字母和自增后的次数存入到map集合中。覆盖调用原理键所对应的值。
4,将map集合中的数据变成指定的字符串形式返回。
代码实现如下:
package com.package1;
/*
* 功能:获取一个字符串“abababcgh”中各个字母出现的次数,并且打印
* 方式:利用TreeMap实现。
*/
import java.util.*;
import java.util.Map.Entry; public class MapDemo2 { public static void main(String[] args) { String s="sfcnewjgwfvskfksdjfjsakdjjjjj";
Getnum(s); } public static void Getnum(String s)
{
char[] a=s.toCharArray(); TreeMap<Character,Integer> tm=new TreeMap<Character,Integer>(); //根据数组中的元素,循环查找集合中是否存在
for(int i=0;i<a.length;i++)
{
Integer values=tm.get(a[i]); //判断values的值
if(values==null)
{
//将数组中的值put到集合中
tm.put(a[i], 1);
}
else
{
values=values+1;
tm.put(a[i], values); }
}
System.out.println(tm); //取出数据
//方式一:entrySet();
/* Set<Map.Entry<Character,Integer>> es =tm.entrySet();
Iterator<Map.Entry<Character, Integer>> it=es.iterator(); //循环取出
while(it.hasNext())
{
//me为映射关系
Entry<Character, Integer> me=it.next();
//根据映射关系取出K-V
Character c=me.getKey();
Integer in=me.getValue(); System.out.println(c+"("+in+")"); }*/ //取出方式2:keySet();
Set<Character> ks=tm.keySet();
Iterator<Character> it=ks.iterator(); while(it.hasNext())
{
Character key=it.next(); //得到K
Integer in=tm.get(key); //根据K取出value System.out.println(key+"("+in+")");
} } }
Java集合框架—Map的更多相关文章
- java集合框架——Map
		
一.概述 1.Map是一种接口,在JAVA集合框架中是以一种非常重要的集合.2.Map一次添加一对元素,所以又称为“双列集合”(Collection一次添加一个元素,所以又称为“单列集合”)3.Map ...
 - Java集合框架——Map接口
		
第三阶段 JAVA常见对象的学习 集合框架--Map集合 在实际需求中,我们常常会遇到这样的问题,在诸多的数据中,通过其编号来寻找某一些信息,从而进行查看或者修改,例如通过学号查询学生信息.今天我们所 ...
 - Java集合框架Map接口
		
集合框架Map接口 Map接口: 键值对存储一组对象 key不能重复(唯一),value可以重复 常用具体实现类:HashMap.LinkedHashMap.TreeMap.Hashtable Has ...
 - JAVA集合框架 - Map接口
		
Map 接口大致说明(jdk11): 整体介绍: 一个将键映射到值的(key-value)对象, 键值(key)不能重复, 每个键值只能影射一个对象(一一对应). 这个接口取代了Dictionary类 ...
 - java集合框架map
		
Map<K,V> K key V value Map集合:该集合存储键值对.一对一对往里存,而且要保证键的唯一性. 1,添加. 2,删除. 3,判断. 4,获取. Map |--Hasht ...
 - Java—集合框架Map
		
Map接口 Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,key和value可以是任意类型的对象,能够实现根据key快速查找value. Map中的键值对以Entr ...
 - Java集合框架List,Map,Set等全面介绍
		
Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +- ...
 - Java集合框架之map
		
Java集合框架之map. Map的主要实现类有HashMap,LinkedHashMap,TreeMap,等等.具体可参阅API文档. 其中HashMap是无序排序. LinkedHashMap是自 ...
 - 【JAVA集合框架之Map】
		
一.概述.1.Map是一种接口,在JAVA集合框架中是以一种非常重要的集合.2.Map一次添加一对元素,所以又称为“双列集合”(Collection一次添加一个元素,所以又称为“单列集合”)3.Map ...
 
随机推荐
- sort命令实战
			
本文参考:http://www.cnblogs.com/dong008259/archive/2011/12/08/2281214.html 东方雨中漫步者 sort命令,帮助我们依据不同的数据类型进 ...
 - uboot——详解各目录下的文件作用
			
uboot下载地址:http://ftp.denx.de/pub/u-boot/ 1.目录分布 2.目录结构变化: u-boot-2010.03及以前版本 ├── api ...
 - Note: Differentially Private Access Patterns for Searchable Symmetric Encryption
			
The Core Issues and Ideas of This Paper Problem Baseline Searchable Symmetric Encryption (SSE) could ...
 - 清北刷题冲刺 11-02 p.m
			
函数最值 #include<iostream> #include<cstdio> #include<cstring> #define maxn 100010 usi ...
 - ios一个自定义的下拉多选菜单
			
前段时间项目刚好要做到条件筛选菜单,正好找到一些别人写的,结合自己实际需求进行优化修改,一个实用的多条件筛选菜单,根据其他的下拉进行一些改进. 点击后返回点击文字显示 github地址:https:/ ...
 - PHP-CGI远程任意代码执行漏洞(CVE-2012-1823)修复方案
			
首先介绍一下这个漏洞,其实是在apache调用php解释器解释.php文件时,会将url参数传我给php解释器,如果在url后加传命令行开关(例如-s.-d .-c或 -dauto_prepend_ ...
 - linux限制内存和磁盘使用
			
一.如何限制用户的磁盘空间 1. 查看系统中所有用户的磁盘空间配额 sudo repquota /dev/vda1 2. 查看某个用户的磁盘空间配额 sudo edquota user_name 要想 ...
 - 自动化测试 - Appium + Python史上最全最简环境搭建步骤
			
一,为什么是Appium借一张图: 1.1 Appium优点 l 开源 l 跨架构:NativeApp.Hybird App.Web App l 跨设备:Android.iOS.Firefox ...
 - 如何创建width与height比例固定的元素
			
面试题,刚在github上看到的,说说这里面的知识点吧~~ padding-bottom的值,其百分比是根据元素自身的width来算的. padding,在标准盒模型中,width+padding+b ...
 - bash和zsh切换
			
zsh切换bash bash切换zsh 切换bash chsh -s /bin/bash 切换zsh chsh -s /bin/zsh