java映射Map

本文介绍 Java 中 TreeMap 的基本概念及使用方法,通过示例代码展示了如何创建 TreeMap、添加元素、获取值、遍历键值对等操作,并演示了删除特定键值对的过程。

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

映射

    Map用于存储一个由关键字(key)和它们的值(value)组成的条目集合。Map把关键字映射到相应的值,关键字必须是独一无二的,但是不同的关键字也可以对应相同的值。因此,值不需要独一无二。

    HashMap中的关键字是无序的,TreeMap中的关键字是有序的。

    Map可以作为一个序偶(pair)的Set实例来实现,它的比较器或者equals/hashCode的实现仅仅涉及关键字。Map接口不是扩展自Collection,它是自己独立存在的。


下面是一个TreeMap的使用实例:

package chapter02;

import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class MapTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建一个TreeMap
        Map<String,Integer> date = new TreeMap<String,Integer>();
        
        //添加键值对
        date.put("Monday", 1);
        date.put("Tuesday", 2);
        date.put("Wednesday", 3);
        date.put("Thursday", 4);
        date.put("Friday", 5);
        date.put("Saturday", 6);
        date.put("Sunday", 7);
        
        System.out.println("date.get(\"Monday\"):" + date.get("Monday"));
        
        System.out.println("\nThe map is: ");
        //打印输出TreeMap
        printMap("date", date);
        
        System.out.println("\nThe keys are: ");
        //得到键的集合
        Set<String> keys = date.keySet();
        //打印输出键
        printStringCollection(keys);
        
        System.out.println("\nThe values are: ");
        //得到值的集合
        Collection<Integer> values = date.values();
        //打印输出值
        printIntCollection(values);
        
        //删除特定的键值对
        date.remove("Tuesday");
        //或
        /*keys.remove("Tuesday");
        values.remove(2);*/
        
        //打印输出删除操作完成后的TreeMap
        System.out.println();
        System.out.println("After Tuesday and 2 unlisted are removed.");
        System.out.println("The map is: ");
        printMap("date", date);
        
	}
    
	/**
	 * 打印输出键
	 * @param keys
	 */
	private static void printStringCollection(Set<String> keys) {
		// TODO Auto-generated method stub
		Iterator<String> itr = keys.iterator();
		while(itr.hasNext()){
			System.out.print(itr.next() + " ");
		}
	}
    
	/**
	 * 打印输出值
	 * @param values
	 */
	private static void printIntCollection(Collection<Integer> values) {
		// TODO Auto-generated method stub
		Iterator<Integer> itr = values.iterator();
		while(itr.hasNext()){
			System.out.print(itr.next() + "     ");
		}
		System.out.println();
	}

    /**
     * 打印输出TreeMap
     * @param string
     * @param date
     */
	private static <KeyType, ValueType> void printMap(String string, Map<KeyType, ValueType> date) {
		// TODO Auto-generated method stub
		System.out.println(string + ":");
		
		Set<Map.Entry<KeyType, ValueType>> entries = date.entrySet();
		
		for(Map.Entry<KeyType, ValueType> thisPair : entries){
			System.out.print(thisPair.getKey() + ":");
			System.out.print(thisPair.getValue() + "\n");
		}
	}

}


运行结果:

/************************************************************************/

date.get("Monday"):1

The map is: 
date:
Friday:5
Monday:1
Saturday:6
Sunday:7
Thursday:4
Tuesday:2
Wednesday:3

The keys are: 
Friday Monday Saturday Sunday Thursday Tuesday Wednesday 
The values are: 
5     1     6     7     4     2     3     

After Tuesday and 2 unlisted are removed.
The map is: 
date:
Friday:5
Monday:1
Saturday:6
Sunday:7
Thursday:4
Wednesday:3

/************************************************************************/

### Java中的Map接口及其使用 #### Map接口简介 `Map` 是一种双列集合类的根接口,用于存储具有键 (Key) 和值 (Value) 映射关系的元素。每个元素都包含一对键值,在使用 `Map` 集合时可以通过指定的 Key 找到对应的 Value[^4]。 #### 主要实现类 主要实现了 `Map` 接口的类有 `HashMap` 和 `TreeMap` 等。其中 `HashMap` 提供了基本的操作性能优化,而 `TreeMap` 则保持了按键排序的功能。 #### 基本操作方法 ##### 添加元素 可以利用 `put(K key,V value)` 方法向 `Map` 中添加键值对;当需要有条件地添加新键值对时,则可采用 `putIfAbsent(K key,V value)` 方法,这会在键不存在的情况下才执行插入动作[^1]。 ```java import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args){ Map<String, Integer> map = new HashMap<>(); map.put("a", 6); map.put("b", 2); System.out.println(map); //{a=6, b=2} // 如果 "b" 键已存在不会更新其值,对于 "c" 将创建新的条目 map.putIfAbsent("b", 3); map.putIfAbsent("c", 8); System.out.println(map); //{a=6, b=2, c=8} } } ``` ##### 获取所有Entry对象并遍历 为了获取所有的 Entry 对象以便于进一步处理或展示数据,通常会先得到整个 `entrySet()` 的视图再对其进行迭代访问: ```java import java.util.*; class entrySetDemo{ public static void main(String[] args){ Map<String, String> m = new HashMap<>(); m.put("key1","value1"); m.put("key2","value2"); Set<Map.Entry<String,String>> s = m.entrySet(); Iterator<Map.Entry<String,String>> i = s.iterator(); while(i.hasNext()){ Map.Entry<String, String> e = i.next(); String key = e.getKey(); // 返回与此项对应的键。 String value = e.getValue(); // 返回与此项对应的值。 System.out.printf("%s=%s\n", key,value ); } } } ``` 这段代码展示了如何通过 `entrySet()` 来获得一组不可重复且有序(取决于具体实现)的映射表记录,并逐一遍历它们以提取出各自的键和值信息[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值