Java中的Map容器---1----HashMap

今天复习到最近复习到容器部分,学过数据结构,知道哈希表,哈希函数,哈希查找,但是一直都没有实现过,也不知道怎么用的,今天看了一下视频,跟着写了一下hashmap的操作,读了一下hashmap的源码。也算是加强一下理解吧。

package com.map;

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

public class HashMapDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//这里两个类型分别是建和值的类型、
		
		//HashMap<String,String> map=new HashMap<String,String>();
		//也按下面方法写,接口Map的引用变量可以指向是实现类HashMap的对象
		//道理和前面的linkedList是一样的
		Map<String,String> map=new HashMap<String,String>();
		//这里注意,键是唯一的,不能重复。下面添加一个重复的,会被后来添加的覆盖掉。
		map.put("Jay", "周杰伦");
		map.put("halin", "庾澄庆");
		map.put("Jay", "张三");
		map.put("Rose", "螺丝");
		map.put("Mary", "玛丽");
		System.out.println(map);
//		//获取map中所有的键
//		Set<String> keys=map.keySet();
//		//Set集合也是继承了Iterator。只要是继承了Iterator都可以用迭代器或者增强for循环 
//		for(String key:keys){
//			System.out.println(key);
//		}
		//获取map当中所有的值
		//Collection集合也是继承了Iterator。只要是继承了Iterator都可以用迭代器或者增强for循环 
		Collection<String> values = map.values();
		for(String value:values){
			System.out.println(value);
		}
		//得到key的同事得到key对应的值
		Set<String> keys=map.keySet();
		for(String key:keys){
			System.out.println(key+"-----"+map.get(key));
		}
		
		/*当我们调用put(key,value)方法的时候
		 * 首先会把key和value封装到entry静态内部类对象当中
		 * 然后把entry放到数组里面。所以我们想获取map中的键值对
		 * 我们只需要获取数组中的entry对象。
		 * 调用entry对象中的getKey和getValue方法
		 * 
		 * entrySet就是从数组中取出entry对象放到Set里面
		 * */
		
		//想输出hashmap里面所有的键值对的时候,基本上都用这种方法。
		Set<Entry<String, String>> entrys = map.entrySet();
		for(Entry<String,String> entry:entrys){
			System.out.println(entry.getKey()+"----"+entry.getValue());
		}
		
		/*hashMap调用默认构造方法,会产生一个底层长度为16的entry数组
		 *entry是一个静态内部类
		 *
		 *
		 *hashmap内部结构是一个数组链表结构  既有数组又有链表
		 *因为不同的Key有可能算出相同的散列值,根据散列值存放到数组的下标会冲突
		 *这个时候有两种情况  1 若建和值是一样的直接覆盖掉
		 *                2  键值不一样,就会在数组上该下标的地方形成链表。把有冲突的地方链起来
		 *                
		 * 
		 * */
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值