Map接口的实现类:HashMap(主要实现类)、LinkedHashMap、TreeMap
Map:添加Key-Value键值对
HashMap
1、Key使用Set存放,不可重复,Value使用Collection存放,可以重复,一个Key-Value是一个Entry,不可重复
2、添加元素,调用类的equals()方法,判断是否相同,相同元素靠后存储
3、常用方法:
@Test
public void test1() {
HashMap map = new HashMap();
//1、Object put(Object key,Object value):添加元素
map.put("AA", 213);
map.put("BB", 456);
map.put(444, "VV");
map.put(null, null);
map.put(new Person("AA", 23), 55);
map.put(new Person("AA", 23), 56);
//2、size()返回集合长度
System.out.println(map.size());
//3、Object remove(Object key):按照指定的key删除此key-value
map.remove(444);
//4、打印map
System.out.println(map);
//5、void putAll(Map t):向Map中添加另一个Map
//6、void clear():清空
//7、Object get(Object key):得到指定key的value
System.out.println(map.get("AA"));
//8、boolean containsKey(Object key)
System.out.println(map.containsKey("AA"));
//9、boolean containsValue(Object value):判断是否包含key/value,equals方法均要重写
System.out.println(map.containsValue(213));
}
Map是无序的,因此遍历结果与put元素顺序无关
4、刷题时遇到的其他方法:
//10、分别得到Map的key、value集合以及Entry集合,每种集合类型与Map中对应类型相同
//使用时可以添加泛型
Set KeySet=map.keySet();
Collection Values=map.values();
Set EntrySet=map.entrySet();
System.out.println(KeySet);
System.out.println(Values);
System.out.println(EntrySet);
LinkedHashMap
使用链表维护添加进Map中的顺序
@Test
public void test3() {
Map map = new LinkedHashMap();
map.put("AA", 213);
map.put("BB", 456);
map.put(444, "VV");
map.put(null, null);
map.put(new Person("AA", 23), 55);
System.out.println(map);
}
TreeMap
1、按照添加进Map中的元素的Key的指定属性进行排序(定制排序),添加类(Person)需要实现equals和compareTo方法
2、实现Comparator接口类对象,并作为排序参数传入TreeMap构造器
@Test
public void test5() {
//TreeMap的定制排序
Comparator com = new Comparator() {//抽象类实现接口
@Override
public int compare(Object o1, Object o2) {
if (o1 instanceof Person1 && o2 instanceof Person1) {
Person1 p1 = (Person1) o1;
Person1 p2 = (Person1) o2;
int i = p1.getSex().compareTo(p2.getSex());
if (i == 0) {
return p1.getAge().compareTo(p2.getAge());
}
return i;
}
return 0;
}
};
//将Comparator接口作为参数传递到TreeMap构造器
Map map = new TreeMap(com);
map.put(new Person1("AA", 23), 55);
map.put(new Person1("CC", 44), 55);
map.put(new Person1("ZZ", 255), 55);
map.put(new Person1("DD", 32), 55);
map.put(new Person1("GG", 11), 55);
map.put(new Person1("MM", 15), 55);
for (Object a : map.keySet()) {
System.out.println(a + "=" + map.get(a));
}
}
按照Comparator接口实现对象中的排序方法进行排序
2、自然排序
添加类需要重写equals()方法及compareTo()方法,compareTo方法用于说明不同类对象间的比较
方法
Person类的compareTo方法:
@Override
public int compareTo(Object o) {
if(o instanceof Person){
Person p=(Person)o;
//return this.sex.compareTo(p.sex);
int i=this.age.compareTo(p.age);
if(i==0){
return this.sex.compareTo(p.sex);
}else{
return i;
}
}
return 0;
}
TreeMap的自然排序:
@Test
//TreeMap的自然排序
public void test4() {
Map map = new TreeMap();
map.put(new Person("AA", 23), 55);
map.put(new Person("CC", 44), 55);
map.put(new Person("ZZ", 255), 55);
map.put(new Person("DD", 32), 55);
map.put(new Person("GG", 11), 55);
map.put(new Person("MM", 15), 55);
for (Object a : map.keySet()) {
System.out.println(a + "=" + map.get(a));
}
}
排序结果按照Person中conmareTo方法进行排序