1、Map
Map用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的key,一组保存Map里的value,key和value都可以是任何引用类型的数据。Map的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较总会返回false。
key和value之间存在着单向的一对一的关系,通过指定的key,能够找到对应的value。Map中存在一个keySet()方法,能够获得所有的key,由于key不能重复且无序,所以本质上key集合就是一个set集合,而value看起来则像是一个list集合。
Map接口常用方法
void clear():删除该Map对象的所有k-v对
boolean containsKey(Object key):查询该Map对象是否包含指定的Key
boolean containsValue(Object value):查询该Map对象是否包含指定的value
Set entrySet():返回该Map对象包含的k-v对所组成的Set集合,Set集合元素都是Map.Entry(Entry是Map的内部类)对象
Object get(Object key):返回指定key对应的value;如果该Map对象不包含该key,则返回null
boolean isEmpty():查询该Map对象是否为空
Set keySet():返回该Map对象所有key组成的Set集合
Object put(Object key,Object value):向该Map对象添加一对k-v对
Object remove(Object key):删除指定key所对应k-v对
boolean remove(Object key, Object value):删除指定key和value所对应k-v对,成功删除则返回True
int size():返回该Map对象的k-v对个数
2、HashMap和Hashtable
HashMap和Hashtable都是Map接口的实现类,类似于ArrayList和Vector的关系。在实际开发中,HashMap使用率要远远大于Hashtable。从命名规则来看,可知道Hashtable是个古老的类(没有遵从如今的命名规范)。
想要在HashMap和Hashtable中存储数据,用作key的对象必须实现hashCode()方法和equals()方法。
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
/**
* @author RuiMing Lin
* @date 2020-03-05 16:01
*/
public class Person {
//使用Person类所为key
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person)) return false;
Person person = (Person) o;
return getAge() == person.getAge() &&
Objects.equals(getName(), person.getName());
}
@Override
public int hashCode() {
return Objects.hash(getName(), getAge());
}
public static void main(String[] args) {
HashMap<Person, String> hmap = new HashMap<>();
hmap.put(new Person("小明", 18), "是个坏学生");
hmap.put(new Person("小红", 17), "是个好学生");
hmap.put(new Person("小刚", 19), "是个学霸");
Set<Map.Entry<Person, String>> entrySet = hmap.entrySet();
for (Map.Entry<Person, String> entry : entrySet) {
Person person = entry.getKey();
String string = entry.getValue();
System.out.println("person = " + person + "..." + "string = " + string);
}
}
}
3、LinkedHashMap
LinkedHashMap是HashMap的一个子类,用法几乎一样,只是存储顺序的实现方法不同。LinkedHashMap的底层是使用哈希表与双向链表来保存所有元素,所以LinkedHashMap的迭代顺序和插入顺序一致。
import java.security.Key;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
/**
* @author RuiMing Lin
* @date 2020-03-05 16:14
*/
public class LinkedHashMapDemo {
public static void main(String[] args) {
LinkedHashMap<String,Integer> lsmap = new LinkedHashMap();
lsmap.put("小明", 18);
lsmap.put("小红", 19);
lsmap.put("小刚", 20);
Set<Map.Entry<String, Integer>> entrySet = lsmap.entrySet();
for (Map.Entry<String, Integer> entry : entrySet) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println("key = " + key + "..." + "value = " + value);
}
}
}
4、SortedMap和TreeMap
SortedMap和TreeMap是原理与上一篇博客的SortedSet和TreeSet一样,详情查看上一篇博客。
有错误的地方敬请指出!觉得写得可以的话麻烦给个赞!欢迎大家评论区或者私信交流!