您的位置:首页 > 职场人生

黑马程序员——Map集合(映射)

2015-08-03 07:58 393 查看
-------
android培训、java培训、期待与您交流! ----------
学习总结

Map集合(映射)

该集合存储键值对,一对对存,也称为双列集合。map集合中必须保证键的唯一性。

常用方法:

1、添加

value put(key,value):返回前一个和key关联的值,如果没有返回null。

2、删除

void clear():清空map集合。

value remove(Object key):根据指定的key删除这个键值对,返回删除的值。

3、判断

boolean containsKey(key);

boolean containsValue(value);

boolean isEmpty();

4、获取

value get(key):通过键获取值,如果没有该键返回null。

int size():获取键值对个数。

Collection<V> values() 获取map集合中的所有值,返回Collection集合。

注意:put方法,添加元素时出现相同的键。那么后添加的值会覆盖原有键对应的值,并返回被覆盖的值。

add方法是collection体系中的添加方法;append方法是字符串缓冲区StringBuffer和StringBuilder中的,注意不要混淆= =

Map主要体系:

1.Hashtable 底层是哈希表,不可以存入null键null值,是线程同步的

2.HashMap 底层是哈希表,允许使用null键null值,不同步

3.TreeMap 底层是二叉树,线程不同步,可用于给map集合中的键进行排序(注意——>只能是键)

Map集合的特殊取出方式

1.Set<k> keySet方法

将map中所有的键存入到Set集合。因为set集合具备迭代器。可以用迭代方式取出所有的键,再用get方法,获取每一个键对应的值。(map没有迭代器)

2,Set<Map.Entry<k,v>> entrySet方法

将map集合中的映射关系存入到了set集合中,而该关系的数据类型就是:Map.Entry,然后可通过Map.Entry中的getKey和getValue方法获取键和值。

知识点介绍完了,结合点例子吧

练习:"sdfgzxcvasdfxcvdf"获取该字符串中的字母出现的次数。希望打印结果:a(1)c(2).....

思路:字符对应次数,那么就可以分别作为键和值存入map中

通过字母作为键去map中找值,存在值就+1,不存在就将字母和值1存入

按格式输出map的键值对

import java.util.*;
class  MapTest
{
public static void main(String[] args)
{
String s= charCount("sdfgzxcvasdfxcvdf");
System.out.println(s);
}

public static String charCount(String str)
{
char[] chs = str.toCharArray();//将字符串变为字符数组
//最后输出的字符为自然顺序,so用TreeMap——>对键排序
TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();
int count = 0;//记录字符出现次数
for(int x=0; x<chs.length; x++)
{
if(!(chs[x]>='a' && chs[x]<='z' || chs[x]>='A' && chs[x]<='Z'))
continue;//获取字母出现的次数,非字母就跳过

Integer value = tm.get(chs[x]);//通过键查值
if(value!=null)
count = value;
count++;//值存在,计数加1;不存在,值变为1
tm.put(chs[x],count);//直接往map集合中存储字母和数字(自动装箱变为对应引用型)
count = 0;//计数要重置,不会影响下个字符

}

StringBuilder sb = new StringBuilder();
//通过entrySet取出map集合的键值对
Set<Map.Entry<Character,Integer>> es = tm.entrySet();
Iterator<Map.Entry<Character,Integer>>  it = es.iterator();
while(it.hasNext())
{
Map.Entry<Character,Integer> m = it.next();
Character ch = m.getKey();
Integer value = m.getValue();
sb.append(ch+"("+value+")");
}

return sb.toString();//通过字符串缓冲区打印
}

}
P.S. if(!(chs[x]>='a' && chs[x]<='z' || chs[x]>='A' && chs[x]<='Z'))continue;

上述实现了不统计非字母字符,刚开始我就没想到这么做,后来看了视频资料后才想到= =
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: