黑马程序员---Java基础---双列集合Map(接口)

-----------android培训java培训、java学习型技术博客、期待与您交流!------------ 


一、Map接口概述:


双列集合:在存储时,同时指定两个字段;一个做"键",一个做"值"(键值对)

将键映射到值的对象

一个映射不能包含重复的键

每个键最多只能映射到一个值

Map接口和Collection接口的不同

Map是双列的,Collection是单列的

Map的键唯一,Collection的子体系Set是唯一的

Map集合的数据结构值针对键有效,跟值无关

Collection集合的数据结构是针对元素有效


二、Map接口成员方法:


V put(K key,V value) :向集合中添加"键值对",如果发生重复的键,将用新值替换原值,并将原值返回;

V remove(Object key):移除key所指定的"键值对"

void clear():清空集合

boolean containsKey(Object key):判断是否包含指定key

boolean containsValue(Object value):判断是否包含指定的value

boolean isEmpty():判断集合是否为空

int size():集合中"键值对"的数量

package cn.hebei.sjz_Map基本功能;

import java.util.HashMap;
import java.util.Map;

/*
 * Map接口的成员方法
 */
public class Demo1 {
	public static void main(String[] args) {
		Map<String, String> map = new HashMap<>();
		// 填充元素
		map.put("it01", "xu");
		map.put("it02", "zhao");
		map.put("it03", "le");
		System.out.println(map);// {it02=zhao,it01=xu,it03=le}
		// 替换原it02对应的值
		map.put("it02", "oahz");
		System.out.println(map);// {it02=oahz,it01=xu,it03=le}
		// 移除it01
		System.out.println(map.remove("it01"));// xu
		System.out.println(map);// {it02=oahz,it03=le}
		// 判断集合是否包含键it01
		System.out.println(map.containsKey("it01"));// false
		// 判断是否包含键it02
		System.out.println(map.containsKey("it02"));// true
		// 判断是否包含值le
		System.out.println(map.containsValue("le"));// true
	}
}


三、Map接口的获取功能:


V get(Object key):使用指定key查找对应"值"

Set<K> keySet():获取所有的"键"的集合(Set集合)

Collection<V> values():获取所有"值"的集合(Collection集合)

Set<Map.Entry<K,V>> entrySet():返回所有的"键值对-对象";Entry是Map的内部类; 一个Entry内部封装了一个"键"和一个"值"

package cn.hebei.sjz_Map基本功能;

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

/*
 * Map接口的获取功能
 */
public class Demo2 {
	public static void main(String[] args) {
		// 实例化一个Map
		Map<String, String> map = new HashMap();
		// 填充元素
		map.put("it01", "xu");
		map.put("it02", "zhao");
		map.put("it03", "le");
		// 获取it03对应的值
		System.out.println(map.get("it03"));// le

		Set<String> keys = map.keySet();
		// 遍历键的集合
		for (String key : keys) {
			System.out.println(key + "," + map.keySet());
		}

		Collection<String> values = map.values();
		// 遍历所有值的集合
		for (String value : values) {
			System.out.println(value);
		}

		Set<Map.Entry<String, String>> entrySet = map.entrySet();
		// 遍历所有的键值对
		for (Map.Entry<String, String> m : entrySet) {
			String key = m.getKey();
			String value = m.getValue();
			System.out.println(key + "," + value);
		}
	}
}


四、Map接口的遍历方式:


方式1:根据键找值

获取所有键的集合:keySet

遍历键的集合,获取到每一个键:迭代器或增强for

根据键找值

方式2:根据键值对对象找键和值

获取所有键值对对象的集合

遍历键值对对象的集合,获取到每一个键值对对象

根据键值对对象找键和值

package cn.hebei.sjz_Map基本功能;

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

/*
 * Map接口的遍历方式
 */
public class Demo3 {
	public static void main(String[] args) {
		Map<String, String> map = new HashMap<>();
		// 填充元素
		map.put("it01", "xu");
		map.put("it02", "zhao");
		map.put("it03", "le");

		// 遍历方式一
		Set<String> keys = map.keySet();
		for (String key : keys) {
			System.out.println(key + "," + map.get(key));
		}

		// 遍历方式二
		Set<Map.Entry<String, String>> entrySet = map.entrySet();
		for (Map.Entry<String, String> m : entrySet) {
			String key = m.getKey();
			String value = m.getValue();
			System.out.println(key + "," + value);
		}

	}
}


五、HashMap类概述:


键是哈希表结构,可以保证键的唯一性

1、HashMap集合键是String值是Student的案例:

package cn.hebei.sjz_HashMap;

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

/*
 * HashMap集合键是String值是Student的案例:
 */
public class Demo {
	public static void main(String[] args) {
		Map<String, Student> map = new HashMap();
		// 填充元素
		map.put("it01", new Student("xu", 23));
		map.put("it02", new Student("zhao", 24));
		map.put("it03", new Student("le", 23));
		// 遍历
		Set<String> keys = map.keySet();
		for (String key : keys) {
			Student s = map.get(key);
			System.out.println("键" + key + "," + "值" + s.name + "," + s.age);
		}
	}
}

2、HashMap集合键是Student值是String的案例:

package cn.hebei.sjz_HashMap;

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

/*
 * HashMap集合键是Student值是String的案例
 */
public class Demo1 {
	public static void main(String[] args) {
		Map<Student, String> map = new HashMap();
		// 填充集合
		map.put(new Student("xu", 23), "it01");
		map.put(new Student("zhao", 24), "it02");
		map.put(new Student("le", 23), "it03");

		// 遍历
		Set<Map.Entry<Student, String>> entrySet = map.entrySet();
		for (Map.Entry<Student, String> e : entrySet) {
			Student stu = e.getKey();
			String value = e.getValue();
			System.out.println("键" + stu.name + "," + stu.age + "值" + value);
		}
	}
}


六、LinkedHashMap概述和使用:


Map 接口的哈希表(保证唯一)和链接列表(保证顺序)实现,具有可预知的迭代顺序。

package cn.hebei.sjz_LinkedHashMap;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

/*
 * LinkedHashMap的概述和使用
 */
public class Demo {
	public static void main(String[] args) {
		// 实例化一个LinkedHashMap
		Map<String, String> map = new LinkedHashMap<>();
		// 填充集合
		map.put("it01", "xu");
		map.put("it02", "zhao");
		map.put("it03", "le");
		// 遍历集合
		Set<String> keys = map.keySet();
		for (String key : keys) {
			System.out.println(key + "," + map.get(key));// 取出时和存入的是一样的顺序
		}
	}
}


七、TreeMap类概述和使用:


键是红黑树结构,可以保证键的排序和唯一性

1、TreeMap集合键是String值是String的案例

package cn.hebei.sjz_TreeMap;

import java.util.Set;
import java.util.TreeMap;

/*
 *  TreeMap集合键是String值是String的案例
 */
public class Demo {
	public static void main(String[] args) {
		// 实例化一个TreeMap
		TreeMap<String, String> map = new TreeMap();
		// 填充集合
		map.put("it01", "xu");
		map.put("it02", "zhao");
		map.put("it03", "le");
		// 遍历集合
		Set<String> keys = map.keySet();
		for (String key : keys) {
			System.out.println(key + "," + map.get(key));
		}
	}
}

2、TreeMap集合键是Student值是String的案例

package cn.hebei.sjz_TreeMap;

import java.util.Comparator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

/*
 * TreeMap集合键是Student值是String的案例
 */
public class Demo1 {
	public static void main(String[] args) {
		// 实例化一个TreeMap
		TreeMap<Student, String> map = new TreeMap(new Comparator<Student>() {
			@Override
			public int compare(Student o1, Student o2) {
				int n1 = o1.name.compareTo(o2.name);
				int n2 = n1 == 0 ? (o1.age - o2.age) : n1;
				return n2;
			}
		});

		// 填充集合
		map.put(new Student("xu", 23), "it01");
		map.put(new Student("zhao", 24), "it02");
		map.put(new Student("le", 23), "it03");

		// 遍历集合
		Set<Map.Entry<Student, String>> entrySet = map.entrySet();
		for (Map.Entry<Student, String> e : entrySet) {
			Student stu = e.getKey();
			String value = e.getValue();
			System.out.println("键" + stu.name + "," + stu.age + "值" + value);
		}

	}
}


八、HashMap和Hashtable的区别


1.Hashtable:

1).不能存储null键和null值;

2).从1.0版本开始;

3).线程安全的(同步),效率低;

2.HashMap:

1).可以存储null键和null值;

2).从1.2版本开始;

3).线程不安全的(不同步),效率高;

package cn.hebei.sjz_HashMap;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

/*
 * HashMap和Hashtable的区别
 */
public class Demo2 {
	public static void main(String[] args) {
		// 实例化一个Hashtable
		Map<String, String> map = new Hashtable();
		// 填充集合
		map.put("it01", "xu");
		// map.put(null, "zhao");//空指针异常
		// map.put("it03", null);//空指针异常

		// 实例化一个HashMap
		Map<String, String> map1 = new HashMap();
		// 填充集合
		map1.put("it1", "xu");
		map1.put(null, "zhao");
		map1.put("it3", null);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值