Java中有许多封装好的数据结构类,比如List,ArrayList,Set,Map,Collection等,它们各自有各自的特点,其中,Map是属于键值对的集合,它提供key到value的映射,能够通过键来找到相应的值。一个Map中不能包含相同的key,每个key只能映射一个 value。本文主要针对其中两种经典常用的Map集合HashMap&TreeMap
//初始化一个map集合
Map map = new HashMap();
//存入数据
map.put("aaa", "aaa");
map.put("bbb", "bbb");
map.put("fff", "fff");
map.put("mmm", "mmm");
map.put("ggg", "ggg");
map.put("sss", "sss");
可以看到,初始化的时候,
既然存了东西,我们就要来使用它,以下是遍历集合中所有的数据:
Iterator iterator = map.keySet().iterator();
while(iterator.hasNext()){
String key = (String)iterator.next();
System.out.println(map.get(key));
}
可以看到,通过map.keySet()返回了这个map中的所有键的集合,然后通过调用iterator()返回一个迭代器,使用该迭代器的hasNext()进行判断,如果还有下一个就将其键取出,并通过map的get()方法,通过映射将对应的值找出,即可实现逐一访问map中的每一个元素。
打印结果:
基本的用法与HashMap相似,代码如下:
public class MapTest {
public static void main(String[] args) {
//初始化一个map集合
Map map = new TreeMap();
//存入数据
map.put("aaa", "aaa");
map.put("bbb", "bbb");
map.put("fff", "fff");
map.put("mmm", "mmm");
map.put("ggg", "ggg");
map.put("sss", "sss");
//遍历输出
Iterator iterator = map.keySet().iterator();
while(iterator.hasNext()){
String key = (String)iterator.next();
System.out.println(map.get(key));
}
}
}
打印结果:
你可能会问,TreeMap中默认是按照升序进行排序的,那如果要让它降序排序呢?
可以通过自定义的比较器来进行设置:
1.首先,定义一个比较器类,实现Comparator接口,重写compare方法,有两个参数,这两个参数通过调用compareTo进行比较,而compareTo默认规则是:
如果参数字符串等于此字符串,则返回 0 值;
如果此字符串小于字符串参数,则返回一个小于 0 的值;
如果此字符串大于字符串参数,则返回一个大于 0 的值。
我们可以通过改写成如下:
static class MyComparator implements Comparator{
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
String param1 = (String)o1;
String param2 = (String)o2;
return -param1.compareTo(param2);
}
}
在返回时多添加了个负号,就将比较的结果以相反的形式返回。
2.通过MyComparator类初始化一个比较器实例,将其作为参数传进TreeMap的构造方法中:
MyComparator comparator = new MyComparator();
Map map = new TreeMap(comparator);
设置完成之后,这个map就会按照我们自定义的比较方式来进行排序了。
完整代码如下:
/**
* @author ZJYANG
* TreeMap的使用
*/
public class MapTest {
public static void main(String[] args) {
//初始化自定义比较器
MyComparator comparator = new MyComparator();
//初始化一个map集合
Map map = new TreeMap(comparator);
//存入数据
map.put("aaa", "aaa");
map.put("bbb", "bbb");
map.put("fff", "fff");
map.put("mmm", "mmm");
map.put("ggg", "ggg");
map.put("sss", "sss");
//遍历输出
Iterator iterator = map.keySet().iterator();
while(iterator.hasNext()){
String key = (String)iterator.next();
System.out.println(map.get(key));
}
}
static class MyComparator implements Comparator{
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
String param1 = (String)o1;
String param2 = (String)o2;
return -param1.compareTo(param2);
}
}
}