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

黑马程序员——Java基础--------Map集合

2015-10-12 15:38 501 查看
-------android培训java培训、期待与您交流! ----------

Map集合

Map<k,v>:一次添加一对元素。Collection 一次添加一个元素。

k,key键  Map也称为双列集合,Collection集合称为单列集合。

v value值   其实map集合中存储的就是键值对。

Map集合中必须保证键的唯一性。 

常用方法:

1,添加。

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

2,删除。

void  clear():清空map集合。

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

3,判断。

boolean containsKey(key)://是否包含指定键

boolean containsValue(value)://是否包含指定值

boolean isEmpty();//是否为空

4,获取。 

value get(key):通过键获取值,如果没有该键返回null。当然可以通过返回null,来判断是否包含指定键。 

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

取出Map集合中的所有元素

方式一:

通过keySet(键集)方法获取map中所有的键所在的Set集合,在通过Set的迭代器获取到每一个键,再对每一个键通过map集合的get方法获取其对应的值即可。

方式二:

通过Map转成set就可以迭代

找到了另一个方法。entrySet。该方法将键和值的映射关系作为对象存储到了Set集合中,而这个映射关系的类型就是Map.Entry类型,通过Map.Entry对象的getKey,getValue方法获取其中的键和值

package map.demo;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class MapDemo {

public static void main(String[] args) {

Map<Integer,String> map = new HashMap<Integer,String>();
//常用方法
method_1(map);
//取出所有元素
method_2(map);
}

public static void method(Map<Integer,String> map){//学号和姓名

// 添加元素。
System.out.println(map.put(8, "wangcai"));//null
System.out.println(map.put(8, "xiaoqiang"));//wangcai 存相同键,值会覆盖。
System.out.println(map);//{8=xiaoqiang}
map.put(2,"zhangsan");
map.put(7,"zhaoliu");

System.out.println(map);//{2=zhangsan,7=zhaoliu,8=xiaoqiang}是无序的

//删除。
//		System.out.println("remove:"+map.remove(2));//remove:zhangsan

//判断。
//		System.out.println("containskey:"+map.containsKey(7));//containskey:ture

//获取。
System.out.println("get:"+map.get(6));//get:null

System.out.println(map);

Outer.Inner.show();
}

}

public static void method_2(Map<Integer,String> map){

map.put(8,"zhaoliu");
map.put(2,"zhaoliu");
map.put(7,"xiaoqiang");
map.put(6,"wangcai");

Collection<String> values = map.values();

Iterator<String> it2 = values.iterator();
while(it2.hasNext()){
System.out.println(it2.next());
}

//方式二
Set<Map.Entry<Integer, String>> entrySet = map.entrySet();

Iterator<Map.Entry<Integer, String>> it = entrySet.iterator();

while(it.hasNext()){
Map.Entry<Integer, String> me = it.next();

Integer key = me.getKey();
String value = me.getValue();
System.out.println(key+"::::"+value);

}
//方式一
Set<Integer> keySet = map.keySet();
Iterator<Integer> it = keySet.iterator();

while(it.hasNext()){
Integer key = it.next();
String value = map.get(key);
System.out.println(key+":"+value);

}

}

Map常用的子类:

Hashtable(1.0就有的,那是还没有Map) :内部结构是哈希表,是同步的。不允许null作为键,null作为值。

其子类Properties:用来存储键值对型的配置文件的信息,可以和IO技术相结合。

HashMap : 内部结构是哈希表,不是同步的。允许null作为键,null作为值。

其子类LinkedHashMap有序

TreeMap : 内部结构是二叉树,不是同步的。可以对Map集合中的键进行排序。

package map.test;

import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

/*
* 练习:
* "fdgavcbsacdfs" 获取该字符串中,每一个字母出现的次数。
* 要求打印结果是:a(2)b(1)...;
* 思路:
* 对于结果的分析发现,字母和次数之间存在着映射的关系。而且这种关系很多。
* 很多就需要存储,能存储映射关系的容器有数组和Map集合。
* 关系一方式有序编号吗?没有!
* 那就使用Map集合。 又发现可以保证唯一性的一方具备着顺序如 a b c ...
* 所以可以使用TreeMap集合。
*
* 这个集合最终应该存储的是字母和次数的对应关系。
*
* 1,因为操作的是字符串中的字母,所以先将字符串变成字符数组。
* 2,遍历字符数组,用每一个字母作为键去查Map集合这个表。
* 如果该字母键不存在,就将该字母作为键 1作为值存储到map集合中。

4000
* 如果该字母键存在,就将该字母键对应值取出并+1,在将该字母和+1后的值存储到map集合中,
* 键相同值会覆盖。这样就记录住了该字母的次数.
* 3,遍历结束,map集合就记录所有字母的出现的次数。oy.
*
*
*/

public class MapTest {

public static void main(String[] args) {

String str = "fdgavcbsacdfs";// 字符串中有comparable方法,所以结果是a到z的顺序

String s = getCharCount(str);

System.out.println(s);

}

public static String getCharCount(String str) {

//将字符串变成字符数组
char[] chs = str.toCharArray();

//定义map集合表。
Map<Character,Integer> map = new TreeMap<Character,Integer>();

for (int i = 0; i < chs.length; i++) {

if(!(chs[i]>='a' && chs[i]<='z' || chs[i]>='A' && chs[i]<='Z'))
continue;//如果不是A 到Z和a到z的不往里添加
//将数组中的字母作为键去查map表。
Integer value = map.get(chs[i]);

int count = 1;

//判断值是否为null.
if(value!=null){
count = value+1;
}

map.put(chs[i], count);

}

return mapToString(map);
}
//返回打印结果
private static String mapToString(Map<Character, Integer> map) {

StringBuilder sb = new StringBuilder();

Iterator<Character> it = map.keySet().iterator();

while(it.hasNext()){
Character key = it.next();
Integer value = map.get(key);

sb.append(key+"("+value+")");
}

return sb.toString();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: