目录
Map是双列集合的顶层接口,它的功能是全部双列集合都可以继承使用的
1、map常用的API
put() 添加元素
public class MapDemo01 {
public static void main(String[] args) {
//创建map集合
Map<String,String> map = new HashMap<>();
map.put("姓名", "小李");
map.put("年龄","19");
String result = map.put("姓名", "小林");
System.out.println(result); //返回结果为小李
System.out.println(map); //输出结果为{姓名=小林, 年龄=19}
}
}
注意:
-
在添加数据的时候,如果键不存在,那么直接把键值对对象添加到map集合当中
-
在添加数据的时候,如果键是存在的,那么会把原来的键值对对象覆盖,会把被覆盖的值进行返回
remove() 删除元素
String removeResult = map.remove("姓名");
System.out.println(removeResult);
注意:
-
通过键去删除
clear() 清空元素
map.clear();
containsKey() 判断是否包含指定键
boolean flag = map.containsKey("小林");
System.out.println(flag);
isEmpty() 判断是否为空
boolean empty = map.isEmpty();
System.out.println(empty);
size() 获取集合长度
System.out.println(map.size());
2、map的遍历方式
-
键找值
-
键值对
-
Lambda表达式
键找值
public class MapDemo02 {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("小林","小吴");
map.put("小明","小华");
//通过键找值
Set<String> Keys = map.keySet();
for (String key : Keys) {
System.out.println(key); //输出所有键
//利用键去找值
System.out.println(map.get(key));
}
}
}
键值对
public class MapDemo02 {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("标枪选手","马超");
map.put("人物挂件","瑶");
//通过键值对对象进行遍历
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entry : entries) {
System.out.println(entry.getKey() + entry.getValue());
}
}
}
lambda
public class MapDemo02 {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("标枪选手","马超");
map.put("人物挂件","瑶");
map.forEach(new BiConsumer<String, String>() {
@Override
public void accept(String key, String value) {
System.out.println(key + value);
}
});
}
}
3、HashMap
-
HashMap是Map里面的一个实现类
-
没有额外需要学习的特有方法,直接使用Map里面的方法就可以了
-
特点都是由键决定:无序、不重复、无索引
-
HashMap跟HashSet底层原理是一模一样的,都是哈希表结构
public class HashMapDemo01 {
public static void main(String[] args) {
HashMap<Student,String> hashMap = new HashMap<>();
Student student01 = new Student("小林",18);
Student student02 = new Student("小吴",19);
Student student03 = new Student("小吴",19); //这个会覆盖
hashMap.put(student01,"福建");
hashMap.put(student02,"广东");
hashMap.put(student03,"上海");
Set<Map.Entry<Student, String>> entries = hashMap.entrySet();
for (Map.Entry<Student, String> entry : entries) {
System.out.println(entry.getKey().getName() + entry.getKey().getAge() + entry.getValue());
}
}
}
4、LinkedHashMap
-
由键决定:有序、不重复、无索引
-
这里的有序指保证存储和取出的元素顺序一致
-
底层数据结构依然是哈希表,只是每个键值对元素又额外多了一个双链表的机制记录存储的顺序
5、TreeMap
-
TreeMap和TreeSet底层原理一样,都是红黑树结构的
-
由键决定特性:不重复、无索引、可排序
-
可排序:对键进行排序
-
注意:默认安装键的从小到大进行排序,也可以自己规定键的排序规则