集合框架Map
集合框架Map介绍
map集合中存放的都是一组组映射关系,一个键对应一个值,并且键不能重复。
它有三个子类:Hashtable,HashMap,TreeMap。我们常用的也就是HashMap和TreeMap。
几个主要的方法就是put,entrySet,keySet.
1.put:添加集合元素的同时,他可以编辑原有的元素.如果说集合中没有key对应的value,那么就往集合中添加元素.如果说集合中对应的key有value值,则代表替换原有的值。返回值为替换前key对应的value值。
2.entrySet:map集合没有自己的迭代器,于是我们就得用到entrySet方法进行集合的遍历,
可以把map集合里的键和值一起取出来
3.keySet:可以把map集合里的键取出来,也是可以用来遍历map集合的。
还有一些方法请点击链接查看在线文档
Map集合的一些应用
-
将学生作为键,地址作为值进行存储,名字年龄相同则被认定为一个人,最后输出。
这里我们就要用到HashMap,建立一个student类,实例化作为key添加到map集合,然后对学生进行判重
判重的方法和HashSet的判重方法一样。 -
然后按年龄进行排序
这里因为要进行排序,所以就要用到TreeMap。方法也和TreeSet的方法一样。
先要让对象具有比较方式,实现Comparable接口,重写compare方法。
class Student implements Comparable<Student>{}
@Override
public int compareTo(Student o) {
// TODO Auto-generated method stub
System.out.println(1);
int num=this.getAge()-o.getAge();
if(num==0) {
return this.getName().compareTo(o.getName());
}
return num;
}
3.需求改变、按姓名进行排序
这里我们要自己定义一个比较器,定义一个类,实现comparator接口,实现compare方法
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;
}
}
让集合自身具备比较在集合初始化时,就有了比较方式。
Map<Student, String> map=new TreeMap<>(new StuComp());
4.统计一个字符串中字符出现次数
将字符串转为字符串数组,将这个字符串中的字符仿作map集合里的key,将出现的次数作为value值。当字符第一次出现的时候,用它在集合中进行寻找,返回值必然为null,之后将该字符对应的值改为1。如果该字符不是第一次出现,该字符对应的值加一。
public class HashMapDemo {
public static void main(String[] args) {
String str="sfgsregsrrfgsreggergsegdssshtjd";
str=cishu(str);
System.out.println(str);
}
/**
* 字符出现次数统计功能
* @param str
* @return
*/
public static String cishu(String str) {
char[] charArray = str.toCharArray();
//map集合中的泛型要使用包装类,或者是引用数据类型
Map<Character, Integer> map=new TreeMap<>();
for (char c : charArray) {
Integer value=map.get(c);
if(value==null) {
map.put(c, 1);
}
else {
map.put(c, ++value);
}
}
StringBuffer sb=new StringBuffer();
Set<Entry<Character, Integer>> entrySet = map.entrySet();
for (Entry<Character, Integer> entry : entrySet) {
sb.append(entry.getKey()+"("+entry.getValue()+")");
}
return sb.toString();
}
}