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,而且还比较麻烦...

为了保证程序的健壮性和易用性,出现了泛型...

猜你喜欢

转载自www.cnblogs.com/MrTanJunCai/p/9906817.html
今日推荐