Java 中的顶级接口Map

Map和Collection类似,都是接口,
* 而且都是集合框架的顶层接口。
*
* 整个集合框架一共分为2大类
* Collection
* 存放单值(单个对象)的容器。
* List
* ArrayList
* LinkedList
* Vector
* Set
* HashSet----hashcode和equals
* LinkedHashSet----hashcode和equals
* TreeSet----compareTo/compare
* Map
* 存放键值对的容器。
* 在Map里,键类似于数组的下标(整数),只不过,
* 键可以是多种数据类型,比如:String、Student等
* 键必须是唯一的,不能重复,一旦键相同了,认为是
* 同一个对象。
*
* Map里值是可以重复的,因为值是跟键关联的,我们
* 找数据是通过键去找的。
*
* Map与Collection的区别是:
* Map找元素快,Collection找元素慢。
* Map拿空间换时间,费空间省时间
* Collection是拿时间换空间,省空间费时间。
Map 是集合框架另一个顶级接口。
它是一种双列集合,它是一种存放键值对的集合。
Map的特点:1、存放键值对。2、键唯一,值可以重复。3、无序的集合。
底层是依靠一个HashTable(哈希表)来完成数据的存放。实际上是有一个很大的数组,
把key的hashcode作为数组的下标,把Value存放对应的下标里。因此Map查找元素快,占用
的内存空间大。Collection是查找慢,占的空间小。
Map接口规定了哪些方法呢?
1、添加元素
put(key,value)
putAll(Map)
2、删除元素
clear()
remove(key)
3、修改元素
put(key,value)
4、获取元素
get(key)
keySet()
values()
entrySet()
5、判断包含
containsKey(key)
containsValue(value)
6、元素个数
size()

Map的常见实现类:
HashMap:普通map(不重复,无序)
TreeMap:内容有序的map(key有序)
LinkedHashMap:存放顺序有序

如何选择使用哪种集合框架?
看项目的需求,是保存单值还是键值对
单值:使用Colletion
能否重复?
能:List
增删多还是查询多?
增删多:LinkedList
查询多:ArrayList
不知道:ArrayList
是否在多线程下访问?
是:Vector
否:ArrayList或LinkedList
不知道:ArrayList
不能:Set
是否需要保持添加顺序?
否:HashSet
是:LinkedHashSet
不知道:HashSet
是否对内容排序?
是:TreeSet(内部比较器–元素实现了Comparable接口(compareTo(T)),外部比较器–使用匿名类实现了Comparator接口(compare(T,T)))
否:HashSet或LinkedHashSet
不知道:HashSet
不知道:
ArrayList
键值对:使用Map
是否保持添加顺序?
否:HashMap
是:LinkeHashMap
不知道:HashMap
是否保持内容有序?
是:TreeMap
否:HashMap或LinkedHashMap
不知道:HashMap
是否多线程下访问?
是:HashTable
否:HashMap
不知道:HashMap
//在map里,键是唯一的。Map也是无序。

 package com.lanou3g.demo1;

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

public class MapBianLi {

public static void main(String[] args) {
	
	Person p1 = new Person("jinsaisai",25);
	Person p2 = new Person("guyunjie",23);
	Person p3 = new Person("hujintao",22);
	Person p4 = new Person("zhanghao",22);
	
	Map<String,Person> map = new HashMap<String,Person>();
	map.put(p1.getName(), p1);
	map.put(p2.getName(), p2);
	map.put(p3.getName(), p3);
	map.put(p4.getName(), p4);
	System.out.println(map);
	
	//如何遍历map。找到key和value
	//第一种:通过键值对集进行遍历
//		Set<Map.Entry<String,Person>> set = map.entrySet();
//		Iterator<Map.Entry<String,Person>> it = set.iterator();
//		while(it.hasNext()) {
//			Map.Entry<String,Person> entry = it.next();
//			Person person = entry.getValue();
//			String name = entry.getKey();
//			System.out.println(name+"="+person.getAge());
//		}
	
//第二种 获取所有的key,遍历key,并通过key获取value
//		Set<String> keys = map.keySet();
//		for (String k : keys) {
//			System.out.println(k+"="+map.get(k));
//		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值