映射可以看到一张多行两列的表格,每一列是“key”,第二列是"value"。例如,使用Map集合管理人员信息:
Key是Value的核心特征表示。例如,使用name来区分不同的Person,可以认为name是Person的核心特征。key 和value是一一对应的。
Map与Collection 比较:
1、在集合框架中,Map与Collection 是并列存在的,互相没有继承关系
2、Map存储单位是key/value对,Collection 存储单位是单个对象
3、Map存储元素使用put方法,Collection使用add方法
4、Map集合没有直接迭代的方法,而是先转成Set集合,在通过迭代获取元素
5、Map集合中key要保证唯一性, 所有key组成一个Set集合。
Map是一种按照键(key)存储元素的容器,键(key)可以是任意类型的对象,所有Value按key存储和获取,主要方法如下:
示例代码:
package cn.com;
import java.util.HashMap;
import java.util.Map;
public class Demo {
public static void main(String[] args) {
//创建一个空的map1
Map<String, Integer> map1 = new HashMap<String, Integer>();
//向map1中添加元素
map1.put("jack", 20);
map1.put("rose", 19);
map1.put("lucy", 20);
map1.put("java", 21);
//输出集合
System.out.println("map1的初始元素:"+map1);
//添加重复的键时返回原有的value
System.out.println(map1.put("jack", 30));
//创建一个空的map2
Map<String, Integer> map2 = new HashMap<String, Integer>();
//向map2中添加元素
map2.put("小张", 20);
map2.put("小李", 19);
//将map2的内容加到map1中
map1.putAll(map2);
//打印现在的map1
System.out.println("添加map2元素后的map1集合:"+map1);
//通过指定的key对象获取value对象
System.err.println("value="+map1.get("jack"));
//获取容器大小
System.out.println("容器大小:"+map1.size());
//判断集合是否为空
System.out.println("集合是否为空:"+map1.isEmpty());
//key是否存在
System.out.println("containskey:"+map1.containsKey("jack"));
//value是否存在
System.out.println("containskey:"+map1.containsValue(20));
//指定key,返回删除的键值对映射的值
System.out.println("value:"+map1.remove("java"));
//清空map集合
map1.clear();
System.out.println("map1:"+map1);
}
}
遍历map集合有三种方法,展示如下:
package cn.com;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Demo {
public static void main(String[] args) {
//创建一个空的map1
Map<String, Integer> map1 = new HashMap<String, Integer>();
//向map1中添加元素
map1.put("jack", 20);
map1.put("rose", 19);
map1.put("lucy", 20);
map1.put("java", 21);
//使用keySet
Set<String> keySet = map1.keySet();
Iterator<String> iterator1 = keySet.iterator();
while(iterator1.hasNext()) {
String key1 = iterator1.next();
Integer value1 = map1.get(key1);
System.out.println("key="+key1+",value="+value1);
}
//使用values()方法
Collection<Integer> values = map1.values();
Iterator<Integer> iterator2 = values.iterator();
while(iterator2.hasNext()) {
Integer value2 = iterator2.next();
System.out.println("value="+value2);
}
//使用Map.Entry对象
Set<Entry<String,Integer>> entrySet = map1.entrySet();
Iterator<Entry<String, Integer>> iterator3 = entrySet.iterator();
while(iterator3.hasNext()) {
Entry<String, Integer> next = iterator3.next();
System.out.println("key="+next.getKey()+",value="+next.getValue());
}
}
}
HashMap是使用最广泛的Map实现,它的底层是哈希表数据结构实现存储,不支持多线程同步,可以存入null键、null 值,示例如下:
package cn.com;
import java.util.HashMap;
public class Demo {
public static void main(String[] args) {
//创建一个空的map1
HashMap<String, Integer> map1 = new HashMap<String, Integer>();
//向map1中添加元素
map1.put("jack", 20);
map1.put("rose", 19);
map1.put("lucy", 20);
map1.put("java", 21);
System.out.println(map1);
}
}
其他操作与上面相同
LinkedHashMap底层使用链表实现,示例如下:
package cn.com;
import java.util.LinkedHashMap;
public class Demo {
public static void main(String[] args) {
//创建一个空的map1
LinkedHashMap<String, Integer> map1 = new LinkedHashMap<String, Integer>();
//向map1中添加元素
map1.put("jack", 20);
map1.put("rose", 19);
map1.put("lucy", 20);
map1.put("java", 21);
System.out.println(map1);
}
}
HashMap中的所有数据都是无序存放的,在TreeMap中按照Key 进行排序。要求Key必须实现Comparable接口,具体要求见TreeSet中的实现要求。
Collections不是Collection接口的实现类,它是一个工具类,其中所有方法都是静态的。
请注意:Collections 和Collection的区别
package cn.com;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Demo {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(4);
list.add(3);
list.add(1);
list.add(2);
list.add(3);
//排序
Collections.sort(list);
//将List转换为数组
Object[] ins = list.toArray();
System.out.println(Arrays.toString(ins));
//折半查找的前提是排序好的元素
System.out.println(Collections.binarySearch(list,8)); // 找不到,返回插入点-1
//反序集合输出
Collections.reverse(list);
System.out.println(list);
//求最值
System.out.println(Collections.max(list));
//fil()使用指定的元素替换指定集合中的所有元素
// Collections.fill(list,5);
System.out.println(list);
//将数组转换为集合.
Integer is[] = new Integer[]{6,7,8};
List<Integer> list2 = Arrays.asList(is);
list.addAll(list2);
System.out.println(list);
}
}