关于Map结构(key-value)

本文详细介绍了Map结构中的HashMap和TreeMap实现原理,HashMap基于散列算法,而TreeMap则采用二叉树。同时,文章讨论了Map的基本操作,如put、get、containsKey和containsValue,以及如何遍历Map的三种方法,包括通过key集合、value集合以及Entry实例来遍历键值对。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HashMap:使用散列算法实现的Map
TreeMap:使用二叉树算法实现的Map

V put(K key,V value):将给定的key与value存于map使用相同的key存放不同数据时为替换数据操作返回的就是被替换的数据.若当前key还不存在于map中返回null
V get(Object key):根据指定的key获取对应的value,若不存在则返回null
boolean containsKey(Object key):查看给定的key是否存在于Map
boolean containsValue(Object value):查看给的的value是否存在于Map

Map的替换方法

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

/**
 * Map
 * 另一种存数据的结构
 * 有别于集合
 * 使用key-value对的形式存放数据
 * 若集合像数组的话,那么Map更像是多行两列的表格
 * @author Administrator
 *
 */
public class TestMap {
	public static void main(String[] args){
		Map<String,String> map=new HashMap<String,String>();
		map.put("a", "A");
		map.put("b", "B");
		map.put("c", "C");
		map.put("d", "D");
		System.out.println(map.size());//4
		System.out.println("map是不是空的:"+map.isEmpty());//map是不是空的:false
		System.out.println(map.toString());//{a=A, b=B, c=C, d=D}
		/**
		 * toString:
		 * {k.toString()=v.toString,k.toString=v.toString,...}
		 */
		System.out.println(map);//{a=A, b=B, c=C, d=D}
		/**
		 * 再次使用"a"作为key存放其他内容
		 * 这是替换操作!put方法返回值是被替换的"A".
		 */
		System.out.println("被替换的元素是: "+map.put("a", "F"));//A
		System.out.println(map);//{a=F, b=B, c=C, d=D}

		
		
		
	}
}

Map方法作用实践

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

public class TestHashMap {

	public static void main(String[] args) {
		/**
		 * 统计每个数字出现的次数
		 */
		String str="123,456,234,235,234,2,123,456,234,235,2,352,6,2";
		String[] s=str.split(",");
		Map<String,Integer> map=new HashMap<String,Integer>();
		for(int i=0;i<s.length;i++){
			if(!map.containsKey(s[i])){
				map.put(s[i], 1);
			}
			if(map.containsKey(s[i])){
				map.put(s[i], map.get(s[i])+1);//get value
			}
		}
		System.out.println(map);
	}

}

Map是根据key的Hash值进行存储的------证明

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

public class TestHashMap2 {

	public static void main(String[] args) {
		Point p1=new Point(1,2);
		Map<Point,String> map=new HashMap<Point,String>();
		map.put(p1, "abc");
		System.out.println(map);//{x: 1,y: 2=abc}
		p1.setX(5);
		map.put(p1, "def");
		System.out.println(map);//{x: 5,y: 2=abc, x: 5,y: 2=def}
		p1.setX(1);
		map.put(p1, "ghi");
		System.out.println(map);//{x: 1,y: 2=ghi, x: 1,y: 2=def}
	}

}

遍历Map

遍历Map有三种方式:
获取所有的key:方法Set<K> keySet()
该方法返回一个Set集合,其元素是map中所有的key

获取所有的value:方法values()
该方法返回所有Value

获取所有的键值对(Entry):
Entry类:map中每一个Entry实例代表一组键值对.
我们可以通过该实例的getKey()和getValue()方法获取这组键值对的键和值.

获取Key

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

public class HashMapKeySet {
/**
 * 遍历HashMap
 * 获取所有的key
 */
	public static void main(String[] args) {
		Map<String,Integer> map=new HashMap<String,Integer>();
		map.put("abc", 2);
		map.put("def", 1);
		map.put("ghi", 6);
		//获取有的key
		
		Set<String> set=map.keySet();
		System.out.println(set);//[abc, def, ghi]
		//遍历
		for(String key:set){
			System.out.println("key:"+key);
			//顺便遍历value
			System.out.println(map.get(key));
		}
	}

}

获取键值对

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

public class HashMapEntrySet {

	public static void main(String[] args) {
		Map<String,Integer> map=new HashMap<String,Integer>();
		map.put("abc", 2);
		map.put("def", 1);
		map.put("ghi", 6);
		/**
		 * 遍历map中所有的键值对
		 * java.util.Map.Entry
		 * Entry是Map中定义的内部类
		 * 用于描述Map中的每一组键值对
		 */
		Set<Entry<String,Integer>> entry=map.entrySet();
		for(Entry<String,Integer> et:entry){
			System.out.println(et);
			
		}

	}

}

获取value

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

/**
 * 遍历hashmap
 * 获取所有的value
 * @author Administrator
 *
 */
public class HashMapValues {

	public static void main(String[] args) {
		Map<String,Integer> map=new HashMap<String,Integer>();
		map.put("abc", 2);
		map.put("def", 1);
		map.put("ghi", 6);
		/**
		 * 获取所有的value
		 * 该方法返回一个集合.但不是Set.要注意
		 */
		//遍历
		Collection<Integer> values=map.values();
		for(Integer it :values){
			System.out.println(it);
		}
		//或者
		Iterator<Integer> it=values.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}

	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值