一、Map
1、说明
Map是一个接口类,该类没有继承自Collection,该类中存储的是<K,V>结构的键值对,并且K一定是唯
一的,不能重复。
2、特性:
1) Map是一个接口,不能直接实例化对象,如果要实例化对象只能实例化其实现类TreeMap或者
HashMap
2)Map中存放键值对的Key是唯一的,value是可以重复的
3) 在Map中插入键值对时,key不能为空,否则就会抛NullPointerException异常,但是value可以
为空
4)Map中的Key可以全部分离出来,存储到Set中来进行访问(因为Key不能重复)。
5) Map中的value可以全部分离出来,存储在Collection的任何一个子集合中(value可能有重复)。
6) Map中键值对的Key不能直接修改,value可以修改,如果要修改key,只能先将该key删除掉,然
后再来进行重新插入
import java.util.HashMap;
import java.util.Map;
public class TestMap {
public static void main(String[] args) {
//创建一个Map的实例
//Map里面泛型参数第一个为key,第二个为value
//通过一个具体的类去实现接口
Map<String,String> map =new HashMap<>();
//1、使用put的方法插入键值对
//map中的元素相对的顺序和插入顺序无关
//注意:key不能重复,如果put的时候发现key已经存在,就会覆盖掉之前的
map.put("及时雨","宋江");
map.put("黑旋风","李逵");
System.out.println(map);
//2、使用get方法,根据key获取value
//如果key不存在的key,get返回null
//还可以使用getOrDefault来根据key获取value
//如果key不存在,getOrDefault返回一个默认值
String value=map.get("及时雨");
System.out.println(value);
//3、使用 isEmpty 判空
//为空返回true,否则返回false
System.out.println(map.isEmpty());
//4、使用size方法获取到键值对的个数
System.out.println(map.size());
//5、使用clear清空所有键值对
map.clear();
System.out.println(map.isEmpty());
System.out.println(map.size());
//6、遍历Map--->选哟把Map转换成Set在遍历
// Entry此处表示“条目”,每个条目就是一个键值对
//map.entrySet()的作用就是将Map这样的键值对结构进行转换
//转换成一个Set,Set里面的每一个元素都是一个Entry,每个Entry里包含了key和value
for(Map.Entry<String,String> entry:map.entrySet()){
System.out.println(entry.getKey()+":"+entry.getValue());
}
//7、单独的获取到所有的key和所有的value
for(String key: map.keySet()){
System.out.println(key);
}
for(String value1 :map.values()){
System.out.println(value1);
}
}
}
二、Set
1.Set的说明
Set是继承自Collection的接口类,Set中只存储了Key。
2、特性:
1)Set是继承自Collection的一个接口类
2)Set中只存储了key,并且要求key一定要唯一
3)Set的底层是使用Map来实现的,其使用key与Object的一个默认对象作为键值对插入到Map中的
4)Set最大的功能就是对集合中的元素进行去重
5)实现Set接口的常用类有TreeSet和HashSet,还有一个LinkedHashSet,LinkedHashSet是在
HashSet的基础上维护了一个双向链表来记录元素的插入次序。
6)Set中的Key不能修改,如果要修改,先将原来的删除掉,然后再重新插入
7)Set中不能插入null的key。
8)TreeSet和HashSet的区别
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class TestSet {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
//1.使用add插入元素(打印出的顺序不确定)
//插入重复的key,实际只保留一份(可用于去重)
set.add("c");
set.add("c++");
set.add("java");
set.add("c#");
System.out.println(set);
//2.使用contains方法判定元素是否存在!!!
boolean ret = set.contains("java");
System.out.println(ret);
//3.使用remove方法删除元素
set.remove("java");
System.out.println(set);
//4、!!!
//注意:Set中的元素不能改,如果非要改,那就删了再插入新的
//5. 使用isEmpty判空
boolean ret2=set.isEmpty();
System.out.println(ret2);
//6、使用size获取元素个数
System.out.println( set.size());
//7.使用clear清空元素
set.clear();
System.out.println(set);
//8.遍历
//1)使用for-each进行遍历(前提是该类得实现 Iterator接口,才能使用for-each)
for(String key:set){
System.out.println(key);
}
//2)使用迭代器(Iterator)进行遍历
//所谓的迭代就好比将一段路分为好多小段,一小段一小段走,慢慢就走到了终点
//迭代器存在的意义就是为了遍历集合类
//先去创建一个Iterator实例,set.iterator()就得到了当前集合类所对应的迭代器对象
Iterator<String> it =set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}