Java集合Map
Posted 菜菜小谭
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java集合Map相关的知识,希望对你有一定的参考价值。
****************************Map**********************************
Map
Hashtable HashMap 1.键值对 2.没有迭代顺序 SortedMap
Properties LinkedHashMap 带有迭代顺序的HashMap NavigableMap
TreeMap
********************************HashMap***************************************
一.什么是Map
字典 键值对 一一对应的关系
key value
放的时候 放一组键值对,放入到map以后 可以通过key来查找value
需求: 根据学科查询该学科的考试成绩
演示代码:
package com.chapter12.map;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* 公司:蓝桥软件学院
* 作者:zhangzy
* 时间:2017年7月19日 上午9:24:43
* 功能:演示HashMap 字典 键值对 一一对应的关系
*/
public class TestHashMap {
public static void main(String[] args) {
//需求: 根据学科查成绩
Map<String,Integer> map = new HashMap<String,Integer>();
Integer i = map.put("java", 100);
map.put("数据结构", 90);
map.put("操作系统", 80);
//返回值: 如果添加进去的时候 map中没有所添加的key 返回null
//如果之前已经有了相同的key 返回这个key所对应的之前的value值
/*Integer score = map.put("操作系统", 85);//key不变 value覆盖
Integer osScore = map.get("操作系统");
System.out.println(osScore);*/
//遍历map
Set<String> keySet = map.keySet();
for(String key:keySet){
System.out.println(key + "=" + map.get(key));
}
}
}
********************************LinkedHashMap***************************************
带有迭代顺序的HashMap
****************************需求:根据DVD查询影评***********************************
package com.chapter12.map;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import com.chapter12.DVD;
/**
* 公司:蓝桥软件学院
* 作者:zhangzy
* 时间:2017年7月19日 上午10:00:54
* 功能:根据电影 查询影评
*/
public class TestHashMapDVD {
public static void main(String[] args) {
Map<DVD,String> map = new HashMap<DVD,String>();
DVD dvd1 = new DVD(1,"归来",80);
DVD dvd2 = new DVD(2,"超凡蜘蛛侠2",50);
DVD dvd3 = new DVD(3,"我的播音系女友",40);
DVD dvd4 = new DVD(4,"X战警",30);
DVD dvd5 = new DVD(5,"归来",80);
//Set 使用hashCode()和equals()去重 如果它俩都相同 是意义上同一个对象 第2个会被去掉
//HashMap 使用hashCode()和equals()判断是否是同一个key 如果hashCode()和equals()都相同 是同一个key
//key 不变 value覆盖
map.put(dvd1, "好看1");
map.put(dvd2, "好看2");
map.put(dvd3, "好看3");
map.put(dvd4, "好看4");
map.put(dvd5, "好看11111111111111");
Set<DVD> keySet = map.keySet();
/*for(DVD key:keySet){
System.out.println(key + "=" + map.get(key));
}*/
//查询: 归来的影评
DVD dvd = new DVD(10,"归来",80);
String yingping = map.get(dvd);
System.out.println(yingping);
}
}
****************************Hashtable和HashMap的区别**********************************
***Hashtable 早期的API JDK1.0 就已经有了
1. Hashtable 是线程安全版本的HashMap
2. Hashtable 的key 和value都不允许为null
HashMap 可以由一个null 的key 和 多个null的value
演示代码:
package com.chapter12;
import java.util.HashMap;
import java.util.Map;
public class TestHashtable {
public static void main(String[] args) {
Map<String,String> map = new HashMap<String,String>();
map.put(null, "aaa");
map.put(null, "bbb");
map.put("aaa", null);
map.put("bbb", null);
}
}
********************************TreeMap***************************************
可以排序的Map,按照key排序
TreeMap如何判断是同一个key,使用compareTo()进行判断,如果compareTo()为0,认为是同一个key
第二个key 不变 value覆盖
HashMap 和 HashSet
TreeMap 和 TreeSet
********************************HashSet的实质***************************************
底层就是HashMap
Set<DVD> set = new HashSet<DVD>();
set.add(dvd1);
map.put(dvd1,obj);
public class HashSet<Object>{
private static final Object obj = new Object();
Map<DVD,Object> map = new HashMap<DVD,Object>();
public boolean add(Object e) {
return map.put(e, PRESENT)==null;
}
}
*****************************************泛型*******************************************
定义类的时候:类型的形参
方法的形参、实际
Set<String> set = new HashSet<String>();//<String> 实参
泛型比Object好处: Object虽然可以添加任何类型,但是不太安全,添加进去以后,会向上转型成Object,
取出来的时候需要向下转型,向下转型不安全,可能发生ClassCastException,而且还比较麻烦...
为了保证程序的健壮性和易用性,出现了泛型...
以上是关于Java集合Map的主要内容,如果未能解决你的问题,请参考以下文章