1、Map是一个接口类,该类没有继承自Collection,该类存储的是
2、关于Map.Entry
Map.Entry
注意:Map.Entry
*Map是一个接口,不能直接实例化对象,如果要实例化对象只能实例化其实现类TreeMap或者HashMap
*Map中存放键值对的key是唯一的,但是value是可以重复的
*Map中的key可以全部分离出来,存储到Set中来进行访问(因为key不能重复)
*Map中的value也可以全部分离出来,存储在Collection的任何一个子集合中(value可能有重复的)
*Map中的key不能直接更改,value可以修改,如果要修改key,只能先将改key删掉,然后在进行重新插入
*TreeMap和HashMap的区别
*HashMap的使用
import java.util.*;
public class TestTreeMap {
public static void main(String[] args) {
//TreeMap演示
Map map=new TreeMap<>();
map.put(1,"hello");
map.put(2,"world");
map.put(2,"~~~");
map.put(4,"dog");
map.put(5,"cat");
map.put(6,"lion");
System.out.println(map);
//获取对应key的值
String s1=map.get(1);
String s2=map.get(2);
System.out.println(s1+" "+s2);
//没有指定key值时,返回一个默认值
String s3=map.getOrDefault(3,"空");
System.out.println(s3);
//此时key已经存在,不能打印空
System.out.println(map.getOrDefault(1,"空"));
//删除操作,根据key去删除
map.remove(3);
System.out.println(map);
//获取所有的key
Set keySet=map.keySet();
System.out.println(keySet);
//获取所有的value
Collection values=map.values();
System.out.println(values);
//是否包含某一个值
System.out.println(map.containsValue("hello"));
System.out.println(map.containsValue("dogs"));
//是否包含key
System.out.println(map.containsKey(1));
System.out.println(map.containsKey(3));
//遍历方式1
System.out.println("===============");
func1(map);
//遍历方式2
System.out.println("===============");
func2(map);
//遍历方式3
System.out.println("===============");
func3(map);
//遍历方式4
System.out.println("===============");
func4(map);
}
/**
* 第四种遍历方法
* 获取所有的值
* @param map
*/
private static void func4(Map map) {
Collection values=map.values();
for (String i:values) {
System.out.println(i);
}
}
/**
* 第三种遍历方法
* 通过迭代器去遍历
* @param map
*/
private static void func3(Map map) {
Iterator> iterator=map.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry entry=iterator.next();
System.out.println("key ="+entry.getKey()+","+"value ="+entry.getValue());
}
}
/**
* 第二种遍历方法
* 通过map.Entry对象去遍历
* @param map
*/
private static void func2(Map map) {
Set> entries=map.entrySet();
for (Map.Entry entry:entries) {
System.out.println("key"+entry.getKey()+","+"value"+entry.getValue());
}
}
/**
* 第一种遍历方法
* 根据所有的key获取值
* @param map
*/
private static void func1(Map map) {
Set keySet=map.keySet();
for (Integer item: keySet) {
System.out.println("key"+item+","+"value"+map.get(item));
}
}
}
3、Set
set与Map主要的不同有两点:Set是继承Collection的接口类,set只存储了key
注意:
*Set只是继承了Collection的接口类
*Set只存储了key,并要求key是唯一的
*Set的底层是使用Map来实现的,其使用key与Object的一个默认对象作为键值对插入到Map中
*Set最大的功能就是对集合中的元素进行去重
*实现Set接口的常用类有TreeSet和HashSet,还有一个LinkedHashSet,LinkedHashSet是在HashSet的基础上维护了一个双向链表来记录元素的插入顺序
*Set中的key值不能被修改,如果要修改必须要把原来的key值删除,再重新插入
*Set中不能插入null的key
*TreeSet和HashSet的区别
import java.util.TreeSet;
public class Demo1 {
public static void main(String[] args) {
TreeSet treeSet=new TreeSet<>();
treeSet.add("Hello");
treeSet.add("world");
treeSet.add("!!!");
treeSet.add(",,,");
System.out.println(treeSet);
treeSet.remove("Hello");
System.out.println(treeSet);
}
}