Java--Map的使用认知
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java--Map的使⽤认知
Java⾥⾯的Map是⼀个抽象接⼝,有⼀些类实现的该接⼝⽐如HashMap、TreeMap等
HashMap是⼀个散列表,存储的内容是靠键值对来映射的(key-value)。
基本认识
HashMap 实现了 Map 接⼝,根据键的 HashCode 值存储数据,具有很快的访问速度,
最多允许⼀条记录的键为 null,不⽀持线程同步。
HashMap 是⽆序的,即不会记录插⼊的顺序。
HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接⼝。
构造⽰意图:
再HashMap中他的Key和Value类型可以相同也可以不同,可以是String的Key,Integer的Value,或者是⾃定义类的Key等HashMap 中的元素实际上是对象,⼀些常见的基本类型可以使⽤它的包装类。
HashMap的⽅法
菜鸟教程上找的的表,很好⽤~
⽅法描述
删除 hashMap 中的所有键/值对
复制⼀份 hashMap
判断 hashMap 是否为空
计算 hashMap 中键/值对的数量
将键/值对添加到 hashMap 中
将所有键/值对添加到 hashMap 中
如果 hashMap 中不存在指定的键,则将指定的键/值对插⼊到 hashMap 中。
删除 hashMap 中指定键 key 的映射关系
检查 hashMap 中是否存在指定的 key 对应的映射关系。
检查 hashMap 中是否存在指定的 value 对应的映射关系。
替换 hashMap 中是指定的 key 对应的 value。
将 hashMap 中的所有映射关系替换成给定的函数所执⾏的结果。
获取指定 key 对应对 value
获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值
对 hashMap 中的每个映射执⾏指定的操作。
返回 hashMap 中所有映射项的集合集合视图。
()返回 hashMap 中所有 key 组成的集合视图。
返回 hashMap 中存在的所有 value 值。
添加键值对到 hashMap 中
对 hashMap 中指定 key 的值进⾏重新计算
对 hashMap 中指定 key 的值进⾏重新计算,如果不存在这个 key,则添加到 hasMap 中对 hashMap 中指定 key 的值进⾏重新计算,前提是该 key 存在于 hashMap 中。
样例代码
package HashMap;
import java.util.*;
public class Test4 {
public static void main(String[] args) {
HashMap<Integer,String> pt = new HashMap<Integer,String>();
HashMap<Phone,String> map = new HashMap<>();
pt.put(1,"卡兹克");
pt.put(2,"剑圣");
pt.put(3,"佛耶⼽");
map.put(new Phone("Apple",7000),"美国");
map.put(new Phone("Sony",6000),"⽇本");
map.put(new Phone("Huawei",8000),"中国");
System.out.println(pt);
System.out.println(map);
for (Phone i : map.keySet()){
System.out.println(i.getBrand()+" is powered by"+map.get(i)+"cost ¥"+i.getPrice());
}
}
}
class Phone{
private String Brand;
private int Price;
public Phone(String brand, int price) {
Brand = brand;
Price = price;
}
public String getBrand() {
return Brand;
}
public void setBrand(String brand) {
Brand = brand;
}
public int getPrice() {
return Price;
}
public void setPrice(int price) {
Price = price;
}
}
前⾯说了可以定义HashMap是基础的类型String,Integer这些,那么看看直接输出的map
可以看到直接⽤的基本类型定义的pt HashMap输出就是 Key=Value,
⽽这⾥⾃定义的Phone类型输出是,HashMap.Phone@7a79be86=中国,其实也是对应的Key和Value,
因为Phone不是基本类型所以它输出的是@....跟的地址值或是Hash值?,如何让他输出⾥⾯我们想要的数据呢?我们⽤⼀个迭代遍历该map,在配合Phone类⾥⾯的get⽅法就能获取到基本类型数据了
HashMap中的嵌套
记住这个⽅法 entrySet()把Map中的映射返回到集合视图
其实在遍历HashMap中的元素时候往往是把它转换成set来遍历的,这样会⽐我上⾯的直接遍历快⼀倍。
⾸先建⽴两个map,再创建⼀个map来嵌套这两个map
也就是说nested map的每个value也是⼀个HashMap了
然后这⾥⽤下⾯的来把map转换成set,这⾥的nested map是⽤String和top定义的HashMap嵌套的
Set<Map.Entry<String, HashMap<String, String> > >
然后第⼀个迭代进去就是可以 i为上单 i.value 也就是top和jungle的HashMap了
想要继续遍历top,那么就需要再⽤⼀个迭代来i.getValue().entrySet() 这个转换的集合
top定义的是两个String 这⾥⾃然也是定义成两个String的集合
然后就能取到我们想要的top⾥⾯的key和value了~~
完整代码:
package HashMap;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Nested {
public static void main(String[] args) {
HashMap<String, String> jungle = new HashMap<>();
jungle.put("卡兹克","T3");
jungle.put("嘉⽂四世","T2");
HashMap<String, String> top = new HashMap<>();
top.put("德莱厄斯","T2");
top.put("腕豪","T1");
//⽤nested map来嵌套上单和打野的HashMap
HashMap<String, HashMap<String, String>> nestedmap = new HashMap<>();
nestedmap.put("打野",jungle);
nestedmap.put("上单",top);
//把nested map的映射转换成集合
Set<Map.Entry<String, HashMap<String, String> > > nestedset = nestedmap.entrySet();
for (Map.Entry<String, HashMap<String, String>> i : nestedset) {
System.out.println(i.getKey());
System.out.println(i.getValue());
//把map 和top的key和value转换成set,再来取嵌套对应的key 和value
Set<Map.Entry<String, String>> entries1 = i.getValue().entrySet();
for (Map.Entry<String, String> j : entries1) {
System.out.println("\t"+j.getKey()+" 现在是"+j.getValue()+"级别");
}
}
}
}
By the way
分析cc链的时候,看到这个直接懵了,所以来学习⼀下Map
public class InstantiateTransformer<T> implements Transformer<Class<? extends T>, T>, Serializable { .....
}
通过学习Map,现在感觉上⾯这个也就是对于Transformer接⼝的实现类,不过这个Transformer继承T泛型有上界 extends T 描述了通配符上界, 即具体的泛型参数需要满⾜条件: 泛型参数必须是 T 类型或它的⼦类。
切记学习之路,少就是多慢就是快!。