day_18_Map
Map : 无序 可重复
-
value可重复, key不可重复
- Map和 集合的操作 基本都是一样的
- Object put(Object key,Object value) : 向map中添加键值对
- void clear() : 清空
- int size() : 添加个数
- boolean isEmpty() : 判断是否为空
- Object get(Object key) : 根据key 获取value
- Collection values() : 获取map中的所有value值,以集合形式返回
- booelan containsKey(Object key) : 判断是否包含某个key
- booelan containsValue(Object value) : 判断是否包含某个value
- Set keySet() : 获取map中的所有key,以Set集合形式返回
- Set entrySet() : 返回map中的键值对映射(key=value),以Set集合形式返回
- V remove(Object key) : 根据key删除指定映射关系,返回value值
map不能直接遍历,可以通过keySet 等方法进行间接遍历
Map用于保存具有映射关系的数据,因此Map集合里保存两组值。
- 一组值用于保存key,一组值用于保存value
- key~value之间存在单向一对一关系,通过指定key可以找到唯一的value值
- key和value都可以是任何引用类型对象
- 允许存在value为null,但是只允许存在一个key为null
public class Map_01 {
public static void main(String[] args) {
Map map = new HashMap();
map.put("A", "one");
map.put("B", "two");
map.put("C", "three");
map.put(1003, "rose");
map.put('A', 1000);
map.put(65, 1000);
map.put("'A'", 1000);
map.put("A", 3000);
// 支持 key和 value 都是null,但是没什么意义,并且只能有一个key为null
map.put(null, null);
// 8
System.out.println(map.size());
// 调用"1003"的hashCode值,然后进行hash 得到数组下标
// 用该对象调用equals方法,和数组中链表的所有对象的key进行比较
// 此对象为 字符串1003 而 map中 没有,只有一个Integer的1003
// false
System.out.println(map.containsKey("1003"));
// 只能去挨个遍历比较
// true
System.out.println(map.containsValue("rose"));
// 先根据"C" 调用HashCode 然后进行hash,得到数组下标,挨个和链表中对象进行equals比较
// 找到对应的对象后,获取其value值
// three
System.out.println(map.get("C"));
System.out.println("========");
// 获取所有的value 并遍历
Collection c = map.values();
for (Object object : c) {
System.out.println(object);
}
// 根据key,删除指定键值对,并返回value值
// three
System.out.println(map.remove("C"));
System.out.println("------------------");
// 把map中所有的key取出,返回set
Set keys = map.keySet();
for (Object key : keys) {
System.out.println(key+" : "+map.get(key));
}
System.out.println("====");
// 把键值对封装到entry中并以set形式返回
Set entrys = map.entrySet();
for (Object object : entrys) {
// 转换为Entry类型
Entry entry = (Entry) object;
System.out.println(entry.getKey()+" : "+entry.getValue());
}
}
}