Map集合 一次添加一对元素 Collection一次添加一个元素
Map也称为双列集合 Collection集合也被称为单列集合
Map集合存储的是键值对 并且必须保证键的唯一性
常用方法:
1,添加
value put(key,value)
返回和前一个key关联的值,如果没有则返回null
比如:第一次传入k1,v1 之后又put一个k1,v2那么就会返回v1
如果之前没有就返回null
2,删除
void clear() 清空集合
value remove()根据指定的key删除键值对,返回这个值
3,判断
boolean containsKey(key)
boolean containsValue(value)
boolean isEmpty()
4,获取
value get(key) //通过键获取值 如果没有该键返回null
当然可以通过返回null来判断是否包含指定键
int size() 获取键值对的个数
public static void main(String[] args) {
// TODO 自动生成的方法存根
Map<Integer,String> map = new HashMap<Integer,String>();
map.put(1, "nihao");
map.put(2, "shenme");
Set<Integer> set = map.keySet();
Iterator it = set.iterator();
while(it.hasNext())
{
Integer key = (Integer) it.next();
String value = map.get(key);
System.out.println(key+" "+value);
}
}
Map常用的子类:
|----Hashtable:内部结构是哈希表,是同步的。不允许null作为键或者值
|-----Properties :用来存储键值对型的配置文件的信息。可以喝IO技术结合
|----HashMap:内部结构是哈希表,不是同步的。允许null作为键或者值
|----TreeMap:内部结构是二叉树,不是同步的。可以对Map集合中的键进行排序
注意:
关于Hash的进行插入或者比较需要重新定义hashCode方法和equals方法
重要的方法:
keySet() entrySet() values()
private static void method_3(Map<Integer, String> map) {
map.put(12, "wangcai");
map.put(13, "xiaoqiang");
map.put(14, "wangcai");
map.put(15, "hanmeimei");
System.out.println(map);
Collection<String> values = map.values(); //values()方法
Iterator<String> it = values.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
private static void method_2(Map<Integer, String> map) {
map.put(12, "wangcai");
map.put(13, "xiaoqiang");
map.put(14, "lilei");
map.put(15, "hanmeimei");
System.out.println(map);
Set<Map.Entry<Integer, String>> entrySet = map.entrySet(); //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);
}
}
public static void method(Map<Integer,String> map){
map.put(12, "wangcai");
map.put(13, "xiaoqiang");
map.put(14, "lilei");
map.put(15, "hanmeimei");
System.out.println(map);
Set<Integer> kyeSet = map.keySet(); //keySet()方法
Iterator<Integer> it = kyeSet.iterator();
while(it.hasNext()){
Integer key = it.next();
String value = map.get(key);
System.out.println(key+":"+value);
}
}
实例:查询出字符串中各个字符的出现次数
public class Demo{
public static void main(String[] args) throws Exception{
//判断字符串中各个字符出现的次数
String str = "aasjhkguybaallkjfdsa";
String res = getMapRes(str);
System.out.println(res);
}
public static String getMapRes(String str) {
//将字符串转化成字符数组
char[] chs = str.toCharArray();
Map<Character,Integer> map = new TreeMap<>();
//遍历字符数组一个一个比较
for(int i = 0; i < chs.length; i++){
Integer value = map.get(chs[i]);
//判断是否为null 若为空说明第一次出现这个字符将其次数设置为1,否则次数加1
if(value == null){
map.put(chs[i], 1);
}
else{
map.put(chs[i],value+1);
}
}
return map.toString();
}
}