Map类

Map

键(key)值(value)对形式

Java基础之Map类_ide

interface Map<K, V>

class HashMap<K, V>哈希表结构

class Tree Map<K, V>底层是树形结构,存储要求K有对应的排序方式

Map双边队列中键(Key)是唯一的,但是值(value)是可以重复的

Map<K, V>双边队列方法

增:

  • put(K k, V v);
    存入一个键值对类型, K和V都要符合泛型约束
  • putAll(Map<? extend K, ? extends V> map);
    存入另一个Map双边队列,并且要求添加的Map双边队列中的K和V都要和当前Map中存储的K和V一致

删:

  • remove(Object K);
    删除对应K的键值对

改:

  • put(K k, V v);
    对应当前K存在,修改对应内容

查:

  • int size();
    当前Map双边队列中,有效键值对个数
  • boolean isEmpty();
    是否为空
  • boolean containsKey(Object key);
    判断指定key是否存在
  • boolean containsValue(Object Value);
    判断指定Value是否存在
  • Set keySet();
    返回整个Map双边队列中所有Key对应的Set集合
    [注意]一个方法使用set结尾,表示该方法返回的是一个集合类型,大多数情况下都是set类型
  • Collection values();
    返回整个Map双边队列中所有Value对应的Collection集合
    [注意]方法名如果是一个复数,返回值类型集合或者是数组情况居多

hashmap实例:

package obj_map;

import java.util.HashMap;

public class Demo1 {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<String, String>();

map.put("1", "one");
map.put("2", "two");
map.put("3", "three");
map.put("4", "four");

System.out.println(map);

HashMap<String, String> map2 = new HashMap<String, String>();

map2.put("yi", "one");
map2.put("er", "two");
map2.put("san", "three");
map2.put("si", "four");

// 添加map
map.putAll(map2);
System.out.println(map);

// 删除元素
System.out.println(map.remove("yi"));
System.out.println(map);

System.out.println(map.remove("1", "one"));
System.out.println(map);

System.out.println(map.containsKey("2"));
System.out.println(map.containsValue("two"));
}
}

Java基础之Map类_java_02

EntrySet

Entry可以认为是键值对对象

定义在Map类内

class Entry <K, V> {
K k;
V v;
}

K,V是完全依赖于Map约束的,这里可以使用Entry里面保存的是每一个键值对类对象

Map中提供了一个方法

Set<Entry<K, V>> entrySet

返回值是键值对类对象Set集合

Set集合中存储的是Entry类型

Entry类型是带有泛型的

实例:

package obj_map;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Demo1 {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<String, String>();

map.put("1", "one");
map.put("2", "two");
map.put("3", "three");
map.put("4", "four");

Set<Map.Entry<String, String>> entrySet = map.entrySet();

System.out.println(entrySet);
}
}

输出结果

Java基础之Map类_键值对_03

TreeMap<K, V>以及Comparable和Comparator

根据键的值进行排序

Comparable实现

Demo2.java

package obj_set;

import java.util.TreeMap;

public class Demo2 {
public static void main(String[] args) {
TreeMap<String, String> map = new TreeMap<String, String>();

map.put("李四", "1");
map.put("王五", "2");
map.put("张三", "3");
map.put("赵六", "4");

System.out.println(map);

TreeMap<Dog, String> map2 = new TreeMap<Dog, String>();

map2.put(new Dog("one", 11), "ocean");
map2.put(new Dog("three", 2), "ocean");
map2.put(new Dog("two", 31), "ocean");

System.out.println(map2);
}
}

Dog.java

package obj_set;

public class Dog implements Comparable<Dog>{
String name;
int age;

public Dog() {
}

public Dog(String name, int age) {
super();
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 "Dog [name=" + name + ", age=" + age + "]";
}

@Override
public int compareTo(Dog o) {
return this.age - o.age;
}
}

Java基础之Map类_java_04

Comparator实现

Demo2.java

package obj_set;

import java.util.Comparator;
import java.util.TreeMap;

public class Demo2 {
public static void main(String[] args) {
TreeMap<String, String> map = new TreeMap<String, String>();

map.put("李四", "1");
map.put("王五", "2");
map.put("张三", "3");
map.put("赵六", "4");

System.out.println(map);

TreeMap<Dog, String> map2 = new TreeMap<Dog, String>(
new Comparator<Dog>() {
@Override
public int compare(Dog o1, Dog o2) {
return o1.getAge() - o2.getAge();
}
}
);

map2.put(new Dog("one", 11), "ocean");
map2.put(new Dog("three", 2), "ocean");
map2.put(new Dog("two", 31), "ocean");

System.out.println(map2);
}
}

Java基础之Map类_ide_05

推荐这种方式,更加简洁