1、Map和Collection没有继承关系。
2、Map集合以key和value的方式存储数据:键值对
- key和value都是引用数据类型。
- key和value都是存储对象的内存地址。
- key起到主导的地位,value是key的一个附属品。
3、Map接口中常用方法:
- V put(K key, V value) 向Map集合中添加键值对
- V get(Object key) 通过key获取value
- void clear() 清空Map集合
- boolean containsKey(Object key) 判断Map中是否包含某个key
- boolean containsValue(Object value) 判断Map中是否包含某个value
- boolean isEmpty() 判断Map集合中元素个数是否为0
- V remove(Object key) 通过key删除键值对
- int size() 获取Map集合中键值对的个数。
- Collection values() 获取Map集合中所有的value,返回一个Collection
- Set keySet() 获取Map集合所有的key(所有的键是一个set集合)
- Set<Map.Entry<K,V>> entrySet()
- 将Map集合转换成Set集合
- 设现在有一个Map集合,如下所示:
map1集合对象
Key | value |
1 | zhangsan |
2 | lisi |
3 | wangwu |
4 | zhaoliu |
- Set set = map1.entrySet();
set集合对象
1=zhangsan 【注意:Map集合通过entrySet()方法转换成的这个Set集合,Set集合中元素的类型是 Map.Entry<K,V>】
2=lisi 【Map.Entry和String一样,都是一种类型的名字,只不过:Map.Entry是静态内部类,是Map中的静态内部类】
3=wangwu
4=zhaoliu —> 这个东西是个什么?Map.Entry
示例代码01:
public class MapTest01 {
public static void main(String[] args) {
//创建Map集合对象
Map<Integer,String> map = new HashMap<>();
//往Map集合中添加键值对
map.put(1,"张三");
map.put(2,"李四");
map.put(3,"王五");
map.put(4,"赵六");
//通过key获取value
System.out.println(map.get(2));
//获取键值对的数量
System.out.println("键值对的数量:" + map.size());
//通过key删除键值对
map.remove(2);
System.out.println("键值对的数量:" + map.size());
//判断map中是否包含key
// 判断是否包含某个key
// contains方法底层调用的都是equals进行比对的,所以自定义的类型需要重写equals方法。
System.out.println(map.containsKey(1));//true
//判断map中是否包含value
System.out.println(map.containsValue("王五"));//true
//foreach遍历map集合的value
Collection<String> values = map.values();
for(String s : values){
System.out.println(s);
}
//清空map集合
map.clear();
System.out.println("键值对的数量:" + map.size());
//判断map集合是否为空
System.out.println(map.isEmpty());
}
}
运行结果:
map集合的遍历
1、通过itrator迭代器进行遍历
2、通过foreach循环遍历
3、通过map集合中的entrySet()方法进行遍历,调用此方法返回的是一个Set集合
示例代码02:
public class MapTest02 {
public static void main(String[] args) {
//创建map集合对象
Map<Integer,String> map = new HashMap<>();
//往集合中添加键值对
map.put(1,"张三");
map.put(2,"李四");
map.put(3,"王五");
map.put(4,"赵六");
//获取集合的所有key
// 遍历Map集合
// 获取所有的key,所有的key是一个Set集合
Set<Integer> keys = map.keySet();
//第一种遍历集合方式
/*Iterator<Integer> it = set.iterator();
while(it.hasNext()){
// 取出其中一个key
Integer key = it.next();
// 通过key获取value
String value = map.get(key);
System.out.println(key + "=" + value);
}*/
//第二种遍历集合方式
for(Integer key : keys){
System.out.println(key + "=" + map.get(key));
}
System.out.println("==================================");
//第三种遍历方式
Set<Map.Entry<Integer, String>> set = map.entrySet();
Iterator<Map.Entry<Integer, String>> it = set.iterator();
while(it.hasNext()){
Map.Entry<Integer, String> node = it.next();
Integer key = node.getKey();
String value = node.getValue();
System.out.println(key + "=" + value);
}
//第四种遍历方式
// foreach
// 这种方式效率比较高,因为获取key和value都是直接从node对象中获取的属性值。
// 这种方式比较适合于大数据量。
for(Map.Entry node : set){
System.out.println(node.getKey() + "---->" + node.getValue());
}
}
}
运行结果:
示例代码03:
//集合中的自定义泛型
public class MyClass {
// 声明一个静态内部类
public static class InnerClass{
//静态方法
public static void doSume(){
System.out.println("静态内部类输出....");
}
//实例方法
public void m(){
System.out.println("静态内部类静态方法输出...");
}
public static void main(String[] args) {
MyClass.InnerClass.doSume();
//创建静态内部类对象
MyClass.InnerClass i = new MyClass.InnerClass();
i.m();
// 给一个Set集合
// 该Set集合中存储的对象是:MyClass.InnerClass类型
Set<MyClass.InnerClass> s = new HashSet<>();
// 这个Set集合中存储的是字符串对象。
Set<String> s1 = new HashSet();
Set<MyMap.Entry<Integer,String>> s2 = new HashSet();
}
}
}
class MyMap{
public static class Entry<K,V>{
}
}