1Map
1.1Map概述
Map 地图映射关系
ORM 对象关系映射 类对象 <==> 数据库数据
双边队列
数据存储形式都是(Key)值(Value)对形式
Map双边队列中对于数据存储类型
有限制 存储数据类型在创建Map双边队列时进行约束,保证数据类型一致化
也没限制 Map可以满足任意数据类型
Map使用两泛型
Map<K,V>
1.2Map整体结构和常用API
interface Map<K,V>
---| class HashMap<K , V>
底层存储数据结构采用的方式是哈希表方式。存储数据时根据当前存储Key作为计算机存储位置,和查询元素的唯一表示。
-------| class TreeMap<K,V>
底层存储数据结构是一个二叉树结构,要求存储的键值对,Key必须有对应排序方式。这里需要Comparable<T>
常用
API Aplication Program Interface
SDK Softer Development Kits
增
put (K key, V value);
添加符合Map要求的键值对存入到双边队列中
put All(Map<? extends K, ? extends V> map)
添加另一个Map到当前Map中,要求当前Map本身对应的K,或者其子类
V是当前Map本身对应V,或者其子类
删
remove(Object key);
删除对应key键值对
改
put(K key, V value);
使用value修改已经存在的key对应的值
查
int size();
Map双边队列个数
boolean isEmpty();
判断当前Map双边队列中是否为空
boolean containKey(Object key);
判断指定Key是否存在
boolean containValue(Object value);
判断指定Value是否存在
Set<K> keySet();
返回Map双边队列中所有Key对应Set集合
Collection<V> valuses();
返回Map双边队列中所有valuse对应Collection集合
【补充】
setId
setName
以上方法是Setter方法,设置类对象属性的方法
keySet
返回值类型是一个Set集合,具有数据存储唯一性
valuses
以s结尾的方法,表示复数,一般返回值类型都是Collection,List或者数组
总结
set开头 设置方法
get开头 获取方法
Set结尾,返回值是Set集合,数据唯一
s结尾,返回值类是Collection,List或者数组
1.3HashMap方法演示
package com.test;
import java.util.Collection;
import java.util.HashMap;
import java.util.Set;
public class Demo1 {
public static void main(String[] args) {
/*
* Map是一接口,没有自己的类对象,这里是Map接口实现类的HashMap做方法演示
*/
HashMap<String, Integer> map1 = new HashMap<String, Integer>();
map1.put("Dior 999", 280);
map1.put("YSL", 220);
map1.put("Mac", 180);
map1.put("阿尼玛 405", 230);
System.out.println(map1);
HashMap<String, Integer> map2 = new HashMap<String, Integer>();
map2.put("TF", 179);
map2.put("雅诗兰黛", 229);
map1.putAll(map2);
System.out.println(map1);
map1.put("阿尼玛 405", 280);
System.out.println(map1);
System.out.println(map1.size());
System.out.println(map1.isEmpty());
System.out.println(map1.containsKey("YSL"));
System.out.println(map1.containsValue("杨树林"));
System.out.println(map1.containsValue(179));
System.out.println(map1.containsValue(100));
Set<String> KeySet = map1.keySet();
System.out.println(KeySet);
Collection<Integer> values = map1.values();
System.out.println(values);
}
}
1.4TreeMap演示
package com.test;
import java.util.TreeMap;
public class Demo2 {
public static void main(String[] args) {
TreeMap<Person, Integer> treeMap = new TreeMap<Person, Integer>(new MyComparator());
Person person = new Person(1, "骚磊" , 16);
treeMap.put(person, 100);
treeMap.put(new Person(2, "骚杰", 26), 100);
treeMap.put(new Person(3, "宝哥", 16), 200);
treeMap.put(new Person(2, "茂林", 56), 100);
treeMap.put(new Person(2, "康爷", 76), 100);
treeMap.put(new Person(2, "大熊", 26), 200);
System.out.println(treeMap);
System.out.println(treeMap.size());
treeMap.put(new Person(6, "大熊", 96) , 200);
System.out.println(treeMap);
System.out.println(treeMap.size());
person.setAge(96);
System.out.println(treeMap);
}
}
package com.test;
public class Person {
private int id;
private String name;
private int age;
public Person() {}
public Person(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
}
package com.test;
import java.util.Comparator;
public class MyComparator implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge() - o2.getAge();
}
}
1.5关于Map键值对整体思想
Map双边队列中把Key和Value进行一个封装操作,完全按照一个数据类型来处理
class Entry<K, V> {
K k;
V v;
.....
}
Map双边队列中提供了操作Entry的方法
Set<Map.Entry<K, V>>entrySet();
返回值类型是Entry键值对形式数据的Set集合
Set<Map.Entry<K,V>>
Map.Entry<K,V>Map接口的内部接口Entry,使用的泛型 K,V对应Map
创建过程中约束的K,V
因为返回值是Set集合,集合中带有泛型 Set<Map 接口中的内部接口Entry>
Entry对应的API
K getKey();
V getValue();
V setValue(V value );
1.6小总结
1Map很重要,尤其是HashMap,键值对操作在后期开发中非常常见
数据库,Session Cookie 数据传递 Json XML..
2比较器接口一定要学会使用!!!
Comparator 【重点】自由度非常高,满足各种条件!!!
Comparator