map集合

一、map集合概述

1、map是一个双列集合,存储的是键和值

2、可以通过键映射到值,找到值

3、键不可以相同,每个键都只能映射到一个值

4、map底层是Hash算法实现的

 

二、map集合的一些重要的方法

  1、添加功能

V put(K key, V value);//向map集合中添加一个K类型的键key,V类型的value,如果键是第一次存储,就存储键,返回null,如果键已经存在,不是第一次存储就把以前的值替换掉,返回旧值保存新值

  2、删除功能

void clear();//移除所有的键对象

V remove(Object key);//根据键删除值,并返回值

  3、判断功能

boolean containsKey(Object key):判断集合是否包含指定的键

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

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

  4、获取元素

Set<K> keySet();//获取键的所有集合(map底层还有个隐含set集合,就是有第三列专门是用set集合来保存键的,set中的key是具体类型的实现compareTo排序的)

V get(K key);//根据键获得值

Set<Map.Entry<K,V>> entrySet();//获取自定义对象的键

 

三、map集合遍历

  1、非自定义对象遍历

package com.xue.test;

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

/**
 * 作用:map集合两种遍历方式
 * 1、普通遍历
 * 2、增强for循环遍历
 * @author 
 *
 */
public class Test11 {
	public static void main(String[] args) {
		HashMap<String,Integer> map  = new HashMap<>();
		map.put("张三", 23);
		map.put("李四", 24);
		map.put("王五", 25);
		map.put("赵六", 26);
		//1、普通遍历
		Set<String> keySet = map.keySet();//获得所有键的集合
		Iterator<String> it = keySet.iterator();
		while (it.hasNext()) {
			String key = it.next();
			System.out.println(key + "=" + map.get(key));
		}
		//2、增强for循环遍历
		for (String key : map.keySet()) {
			System.out.println(key + "=" + map.get(key));
		}
	}

}

  2、自定义对象遍历

把双列集合的键值对变成单列集合的键值对对象,然后遍历这个集合获取每一个键值对对象,根据键值对对象获取键和值

HashMap 集合键是Student时就是自定义对象,重写hasCode与equals方法可保证键的唯一

package com.xue.test;

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

/**
 * 作用:map集合两种遍历方式
 * 1、普通遍历
 * 2、增强for循环遍历
 * @author 
 *
 */
public class Test12 {
	public static void main(String[] args) {
		HashMap<Student, Integer> map = new HashMap<>();
		map.put(new Student("张三","23"), 23);
		map.put(new Student("李四","24"), 24);
		map.put(new Student("王五","25"), 25);
		//1、普通for循环
		Set<Map.Entry<Student,Integer>> entrySet = map.entrySet();//将Student集合放在一个Set集合中去
		Iterator<Map.Entry<Student, Integer>> it = entrySet.iterator();//获取迭代器
		while (it.hasNext()) {
			Map.Entry<Student, Integer> key = it.next();
			Student key2 = key.getKey();
			Integer value = key.getValue();
			System.out.println(key2 + "=" + value);
		}
		
		//2、增强for循环
		for (Map.Entry<Student,Integer> key : map.entrySet()) {
			System.out.println(key.getKey() + "=" + key.getValue());
		}
	}

}

四、map集合下的两个集合

  1、HashMap

底层是哈希算法针对键,无序,存取速度快,效率高

LinkedHashMap:底层是链表

  2、TreeMap

底层是二叉树,针对键,有序

五、HashMap与Hashtable

  Hashtable:命名不规范,在jdk还没有统一规范的时候就出来了,已经被HashMap取代
  共同点:

底层都是哈希算法,都是双列集合
  区别:

1、HashMap是线程不安全的,效率高,jdk1.2版本

2、Hashtable是线程安全的,效率低,jdk1.0版本

3、HashMap可以存储null键和null值,Hashtable不可以存储null键和null值

4、迭代器不一样

六、补充点额外的知识

  Collections里面很多静态方法对List集合操作

1、sort(List<E> list)对List集合进行排序(字典顺序)

2、binarySearch二分法查找,返回索引int

3、max获取集合中的最大值

4、reverse对集合中元素进行反转

5、shuffle对集合中元素随机存储(洗牌)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值