JAVA学习————Day30

Map

1. Map概述

Map 地图,映射关系。
ORM 对象关系映射 类对象 <==> 数据库数据

双边队列
数据存储形式都是键(Key)值(Value)对形式
表格??
姓名 骚磊
年龄 16
性别 男

Map双边队列中对于数据存储类型
	有限制 存储数据类型在创建Map双边队列时进行约束,保证数据类型一致化
	但是也没限制 Map可以满足任意类型

Map使用了两个泛型!!!
	Map<K, V>
1.2 Map整体结构和常用API

interface Map<K, V>
–| class HashMap<K, V>
底层存储数据结构采用的方式是哈希表方式。存储数据时根据当前存储Key作为计算存储位置,和查询元素的唯一表示。
–| class TreeMap<K, V>
底层存储数据结构是一个二叉树结构,要求存储的键值对,Key必须有对应排序方式。这里就需要Comparator 或者 Comparable

常用
API Application Programing Interface
SDK Software Development Kits

put(K key, V value);
添加符合Map要求的键值对存入到双边队列中
putAll(Map<? extends K, ? extends V> map)
添加另一个Map到当前Map中,要求K是当前Map本身对应的K,或者其子类
V是当前Map本身对应的V,或者其子类

remove(Object key);
删除对应Key键值对

put(K key, V value);
使用value修改已存在的key对应的值

int size();
Map双边队列个数
boolean isEmpty();
判断当前Map双边队列中是否为空
boolean containsKey(Object key);
判断指定Key是否存在
boolean containsValue(Object value);
判断指定Value是否存在
Set keySet();
返回Map双边队列中所有Key对应的Set集合
Collection values();
返回Map双边队列中所有value对应Collection集合
【补充】
setId
setName
以上方法是Setter方法,设置类对象属性的方法
keySet
返回值类型是一个Set集合,具有数据存储唯一性
values
以s结尾的方法,表示复数,一般返回值类型都是Collection,List或者数组
总结:
set开头 设置方法
get开头 获取方法
Set结尾,返回值是Set集合,数据唯一
s结尾,返回值类是Collection,List或者数组

1.3 HashMap方法演示
package com.qfedu.a_map;

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

/*
 * Map方法演示
 */
public class Demo1 {
	public static void main(String[] args) {
		/*
		 * Map是一个接口,没有自己的类对象,这里是Map接口的实现类HashMap做方法演示
		 */
		Map<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);
		
		Map<String, Integer> map2 = new HashMap<String, Integer>();
		
		map2.put("TF", 179);
		map2.put("雅诗兰黛", 229);
		
		map1.putAll(map2);
		System.out.println(map1);
		
		map1.remove("Mac");
		System.out.println(map1);
		
		map1.put("阿玛尼 405", 280);
		System.out.println(map1);
		
		System.out.println(map1.size());
		System.out.println(map1.isEmpty());
		//map1.clear();
		//System.out.println(map1.isEmpty());
		
		System.out.println(map1.containsKey("YSL"));
		System.out.println(map1.containsKey("杨树林"));
		
		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.4 TreeMap方法演示
/*
Map中的Key需要对应的排序方式
*/
package com.qfedu.a_map;

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(4, "茂林", 56), 100);
		treeMap.put(new Person(5, "康爷", 76), 100);
		treeMap.put(new Person(6, "大熊", 96), 100);
		
		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.qfedu.a_map;

import java.util.Comparator;

public class MyComparator implements Comparator<Person> {

	@Override
	public int compare(Person o1, Person o2) {
		System.out.println("Comparator接口操作");
		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);
package com.qfedu.a_map;

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

public class Demo3 {
	public static void main(String[] args) {
		HashMap<String, String> map = new HashMap<String, String>();
		
		map.put("迈巴赫", "好");
		map.put("兰博基尼", null);
		map.put("科尼塞克", "太贵了。。。");
		map.put("布加迪", "威龙");
		map.put("五菱宏光", "神车");
		
		Set<Entry<String,String>> entrySet = map.entrySet();
		
		for (Entry<String, String> entry : entrySet) {
			System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue());
			
			System.out.println(entry.setValue("都比较贵"));
			
 		}
	}
}
1.6 小总结
  1. Map很重要,尤其是HashMap,键值对操作在后期开发中非常常见。
    数据库,Session Cookie 数据传递 Json XML…

  2. 比较器接口一定要学会使用!!!
    Comparator [重点] 自由度非常高,满足各种条件!!!
    Comparable

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值