集合框架Map
初识Map集合
1.map的方法归类
首先map集合中存放的都是一组组映射关系 key=value(键值,value值)
map增加的方法:
put:
put(K key, V value) ;
- 添加集合元素的同时,它可以编辑原有的元素
- 如果说集合中没有key对应的value,那么集合中添加元素
- 如果说集合中对应的key有value值,则代表替换原有的值
- 添加元素时,如果键已经在集合中存在,那么后添加的值会覆盖原来的值,并且put方法会将原有的值返回
案例 如下图:
2.返回替换前的key对应的value的值
首先有两种方法:
- entrySet:
使用这种方法如下代码:
Set<Entry<String, Object>> entrySet = map.entrySet(); for (Entry<String, Object> entry : entrySet) { System.out.println(entry.getKey()+"==="+ entry.getValue()); }
- keySet:
Set<String> keySet = map.keySet();
for (String key : keySet) {
System.out.println(key+"==="+ map.get(key));
(注:这两种方法是有区别的:entrySet跟迭代器的原理是一样的,当它遍历的时候会将key值,与value值一起遍历,比起keySet更具有实用性与方便性,entrySet本身map集合中。
keySet遍历只能将key值遍历,再通过key值取value值。)
Map删除的方法
删除使用的代码:map.clear();
案例:
执行完map.char()之后
结果为:
集合当中就会为空的。
Map集合的实际应用
首先我们设定一个需求:
1、将学生作为键,地址作为值进行存储,名字年龄相同则被认定为一个人,最后输出
2、最后按年龄进行排序
3、需求改变、按姓名进行排序
**完成第一个需求**
* a.建立一个Student类,实例化作为Key添加到map集合中
* b.对学生进行判重
如以下的代码:
1.建立一个实体类;
其次实例化作为Key添加到map集合中
Map<Student, String> map = new HashMap<>();
map.put(new Student("liuting",18), "beijing");
map.put(new Student("xuyangyang",20), "xingjiang");
map.put(new Student("bb",14), "qwe");
map.put(new Student("cc",112), "d");
map.put(new Student("liuting",18), "beijing");
(注:在这里必须使用HashMap)
**2.重写hashcode**
public int hashCode() {
// TODO Auto-generated method stub
return this.getName().hashCode()+this.getAge()*99;
}(注:代码之后的数字并没有错误,运用实际比较重要)
3.进行判断重复
如下面代码
public boolean equals(Object obj) {
Student stu =(Student) obj;
return this.getAge()== stu.getAge()&&this.getName().equals(stu.getName());
}
4.进行遍历:
使用entrySet的方法进行遍历
Set<Entry<Student,String>> entrySet = map.entrySet();
for (Entry<Student, String> entry : entrySet) {
System.out.println(entry.getKey()+"---"+ entry.getValue());
}
返回一个equals判断重复的方法
之后得到结果如下:
2.按照需求进行年龄排序
1.首先对实体类用Compreble接口进行实现
class Student implements Comparable<Student>
再重写一个方法对年龄进行判断,先判断主要条件再判断次要条件,如以下代码(注:以免出现不符合逻辑的情况)
public int compareTo(Student o) {
// TODO Auto-generated method stub
int num = this.getAge()-o.getAge();
if(num==0) {
return this.getName().compareTo(o.getName());
}
return num;
}
得到结果:
3.按照需求名字进行排序
1.于按年龄实现排序一样我们需要使用另外一个接口:comparetor
用实体类继承这个接口,再对姓名和年龄进行判断,先判断主要条件,再判断次要条件(注:以免出现不符合逻辑的情况)
class StuComp implements Comparator<Student>{
@Override
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
int num =o1.getName().compareTo(o2.getName());
if(num==0) {
return o1.getAge()-o2.getAge();
}
return num;
}
得到结果:
统计字符再字符串中出现的字数
首先我们思考:我们要对字符串进行统计还有排序
1.统计功能:1,将字符串转为字符数组,将这个字符串中的字符当作map集合中的key将出现value值:
Map<Character, Integer> map = new HashMap<>();
2.当第一个字符出现的时候,那么用它再集合中进行寻找,返回值必然为null
比如:
System.out.println(map.get('s'));(返回值为null)
之后将该字符对应的值改为1,如果说该字符不是第一次出现,该字符对应的值不为null,然后应该加1
map.put('s', 1);(返回值为1)
封装一个字符串数组:对字符串数组进行遍历
得到最后的结果为: