一、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()); } } }