Map集合
地图不能包含重复的键,每个键可以映射到最多一个值,是一个接口,HashMap保证键的唯一性
//创建集合对象
Map map = new HashMap();
//map里添加元素 V put(K key , V value)将指定的值与该映射中的指定关键词相关联
map.put("itheima001","张曼玉");
map.put("itheima002","王祖贤");
map.put("itheima003","林青霞");
sout(map);
HahMap重写了toString方法,把键和值用等号拼接起来,然后输出,键是唯一的,不能重复,当键重复的时候,我们后来的值就会把以前的值覆盖掉
Map集合的基本功能
//创建集合对象
Map map = new HashMap();
//map里添加元素 V put(K key , V value)
map.put("张无忌","赵敏");
map.put("郭靖","黄蓉");
map.put("杨过","小龙女");
//根据键删除键值对元素 V remove(Object key); 然后返回键值对对应的元素
sout(map.remove(key:"郭靖"));//输出键值郭靖对应的元素黄蓉
sout(map.remove(key:"郭襄"));//输出键值对郭襄对应的元素,发现没有键值郭襄,所以返回空元素null
//清除所有键值对元素 void clear
map.clear();
//判断集合是否包含指定的键 boolean containsKey(Object key);
sout(map.containsKey(key:"郭靖"));//判断集合是否包含郭靖这个键,发现包含则返回true;
sout(map.containsKey(key:"郭襄"));//判断集合是否包含郭襄这个键,发现不包含就返回false;
//判断集合是否为空 boolean isEmpty
sout(map.isEmpty());
//测试集合长度 int size();
sout(map.size());
//输出集合对象
sout(map);
删除
清空
判断是否包含指定的键
判断集合是否为空
测试集合长度
Map集合的获取功能
//根据键获取值V get(Object key);
sout(map.get("张无忌"));
sout(map.get("张三丰"));//如果说获取的键或者获取的键的元素在集合中不存在就返回null,如果存在就返回键对应额值
//获取所有键的集合Set keySet();
Set keySet = map.keySet();
//增强for循环遍历
for(String key : keySet){
sout(key);
}
///获取所有值的集合Collection values();
Collection values = map.values();
//增强for循环遍历
for(String value : values){
sout(value);
}
根据键获取值
获取所有键的集合
获取所有值的集合
Map集合的遍历
方式一
遍历键,通过键去找对应的值再输出
//获取所有键的集合Set keySet();
Set keySet = map.keySet();
//增强for循环遍历每一个键
for(String key : keySet){
//根据键去找值,用get方法实现
String value = map.get(key);
sout(key +","+ value);
}
输出结果
方式二
获取所有键值对对象的集合,找到对象提取里面的键和值
//获取所有键值对对象的集合Set> entrySet();
Set> entrySet = map.entrySet();//前面是键,后面是值
//遍历键值对对象的集合,得到每一个键值对对象
for( me : entrySet){
//根据键值对对象获取键和值
String key = me.getKey();
String value = me.getValue();
sout(key +","+ value);
}
输出结果
案例 HashMap存储学生对象并遍历
学生类
创建HashMap集合
//创建HashMap集合对象 键是String类型,值是student类型
HashMap hm = new HashMap();
//创建学生对象
Student s1 = mew Student(name:"林青霞",age:30);
Student s2 = mew Student(name:"张曼玉",age:35);
Student s3 = mew Student(name:"王祖贤",age:33);
//将学生添加到集合
hm.put("itheima001",s1);
hm.put("itheima002",s2);
hm.put("itheima003",s3);
//遍历
//方式1 键找值
Set keySet = hm.keySet();
//增强for循环遍历每一个键
for(String key : keySet){
//根据键去找值,用get方法实现
Student value = hm.get(key);
sout(key +","+ value.getName()+","+ value.getAge());
}
//方式2 遍历键值对对象找键和值
Set> entrySet = hm.entrySet();//前面是键,后面是值
for( me : entrySet){
//根据键值对对象获取键和值
String key = me.getKey();
Student value = me.getValue();
sout(key +","+ value.getName()+","+ value.getAge());
}
输出结果
案例 HashMap存储学生对象并遍历(和上面不一样)
保证键的唯一性,自定义保证唯一性,这次学生作为键存在,并且保证唯一性,因为键是唯一的,所以学生就唯一,
学生类
创建HashMap集合
//创建HashMap集合对象 键是student类型,值是String类型,
HashMap hm = new HashMap();
//创建学生对象
Student s1 = mew Student(name:"林青霞",age:30);
Student s2 = mew Student(name:"张曼玉",age:35);
Student s3 = mew Student(name:"王祖贤",age:33);
//将学生添加到集合 值是位置
hm.put(s1,"西安");
hm.put(s2,"武汉");
hm.put(s3,"郑州");
//遍历
//方式1 键找值
Set keySet = hm.keySet();
//增强for循环遍历每一个键
for(Student key : keySet){
//根据键去找值,用get方法实现
String value = hm.get(key);
sout(key.getName() +","+ key.getAge()+","+value);
}
输出
如果我新建的两个对象成员内容是一样的,那么我们认为是同一个对象,重复的元素,所以s4在添加的时候如果键是一样的,s4应该会覆盖掉s3的位置
//创建HashMap集合对象 键是student类型,值是String类型,
HashMap hm = new HashMap();
//创建学生对象
Student s1 = mew Student(name:"林青霞",age:30);
Student s2 = mew Student(name:"张曼玉",age:35);
Student s3 = mew Student(name:"王祖贤",age:33);
Student s4 = mew Student(name:"王祖贤",age:33);
//将学生添加到集合 值是位置
hm.put(s1,"西安");
hm.put(s2,"武汉");
hm.put(s3,"郑州");
hm.put(s4,"北京");
//遍历
//方式1 键找值
Set keySet = hm.keySet();
//增强for循环遍历每一个键
for(Student key : keySet){
//根据键去找值,用get方法实现
String value = hm.get(key);
sout(key.getName() +","+ key.getAge()+","+value);
}
键相同值应该覆盖掉,如果覆盖掉需要重写hashCode()和equals()方法
重写 alt+insert重写
案例 ArrayList集合存储 HashMap元素并遍历
//创建ArrayList集合
ArrayList> array = new ArrayList>();
//创建HashMap集合并添加键值对元素
HashMap hm1 = new HashMap();
hm1.put("孙策","大乔");
hm1.put("周瑜","小乔");
//把HashMap作为元素添加到ArrayList集合
array.add(hm1);
HashMap hm2 = new HashMap();
hm2.put("郭靖","黄蓉");
hm2.put("杨过","小龙女");
//把HashMap作为元素添加到ArrayList集合
array.add(hm2);
HashMap hm3 = new HashMap();
hm3.put("令狐冲","任盈盈");
hm3.put("林平之","岳灵珊");
//把HashMap作为元素添加到ArrayList集合
array.add(hm3);
//遍历ArrayList集合
for(HashMap hm : array){
Set keySet = hm.KeySet();
for(String key : keySet){
String value = hm.get(key);
sout(key +","+ value);
}
}
输出结果
案例 HashMap集合存储ArrayList元素并遍历
//创建HashMap集合,键是String类型,值是ArrayList类型
HashMap> hm = new HashMap>();
//创建ArrayList集合,并添加元素
ArrayList sgyy = new ArrayList();
//添加元素
sgyy.add("诸葛亮");
sgyy.add("赵云");
//把ArrayList集合作为元素添加到HashMap集合
hm.put("三国演义",sgyy);
//创建ArrayList集合,并添加元素
ArrayList xyj = new ArrayList();
//添加元素
xyj.add("唐僧");
xyj.add("孙悟空");
//把ArrayList集合作为元素添加到HashMap集合
hm.put("西游记",xyj);
//创建ArrayList集合,并添加元素
ArrayList shz = new ArrayList();
//添加元素
shz.add("武松");
shz.add("鲁智深");
//把ArrayList集合作为元素添加到HashMap集合
hm.put("水浒传",shz);
//遍历 遍历HashMap集合
Set keySet = hm.KeySet();
for(String key : keySet){
sout(key);
ArrayList value = hm.get(key);
//遍历ArrayList集合
for(String s : value){
sout("\t"+s);
}
}
输出结果
案例 统计字符串中每个字符出现的次数
//键盘录入一个字符串
Scanner sc = new Scanner(System.in);
sout("请输入一个字符串:");
String line = sc.nextLine();
//创建HashMap集合,键是Character,值是Interger
HashMap hm = new HashMap();
//遍历字符串得到每一个字符
for(int i = 0;i keySet = hm.keySet();
for(Character key : keySet){
Interger value = hm.get(key);
sb.append(key).append("(").append(value).append(")");
}//此时里面四StringBuilder类型,需要转化成String类型
String result = sb.toString();
//输出结果
sout(result);
TreeMap可以对键进行排序