Java基础 Map集合 HashMap TreeMap 基础使用

文章介绍了Java中的Map接口,重点比较了HashMap和TreeMap的区别和用法。HashMap基于哈希表,元素无序,而TreeMap则能对键进行排序。示例代码展示了如何添加、修改、删除元素,以及遍历和查找等基础操作。对于需要排序的场景,推荐使用TreeMap,否则HashMap通常更高效。

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

开发环境:

        Eclipse2022+ JDK1.8

1. 概述

        Map是一种键-值(key-value)集合,每一个元素都包含一个key对象和一个value对象,且key和value之间存在一对一的关系。key值不允许重复,value可以重复。

        Map接口主要的实现类有HashMap和TreeMap。HashMap按哈希算法存取键对象。TreeMap可以对键对象进行排序。

        HashMap、TreeMap均实现Map接口,两者均继承AvstractMap类。HashMap的元素是无序的,TreeMap默认是按key值升序。两者在基础使用上大部分相同。如果对集合元素有排序要求,可以使用TreeMap, 没有的话,建议使用HashMap.

2. 定义与声明

Map<String,String> users = new HashMap<String,String>();
HashMap<String,String> users = new HashMap<String,String>();
TreeMap<String,String> users= new TreeMap<String,String>();

3. 基础功能

        通过以下代码,可以对基础功能进行一个基本的认识。

        3.1 HashMap

package map;

import java.util.*;

public class MapTest {

	public static void main(String[] args) {
		HashMap<String,String> users = new HashMap<String,String>();
        //增加元素
		users.put("44", "李元昊");
		users.put("11", "张浩太");
        users.put("33", "王强文");
        users.put("55", "王路路");
        users.put("22", "刘思诚");
        
        //如果key值重复 实际处理是替换掉了原来的
        users.put("55", "范清清");
        System.out.println(users);
        //返回所有value集合
        //System.out.println(users.values());
        //替换1
        //users.replace("11", "王大锤");
        //System.out.println(users);
        //替换2
        //users.replace("22", "刘思诚", "李院长");
        //System.out.println(users);
        //根据key值删除元素
        //users.remove("11");
        //根据key-value值删除元素
        //users.remove("22", "刘思诚");
        //清除列表
        //users.clear();
        //获取列表个数 如果为0 判断为空 也可以通过isEmpty()判断
        //System.out.println("元素个数"+ users.size());
        //
        //if (users.isEmpty()) {
        //	System.out.println("users为空!"+ users.size());
        //} else {
        //	System.out.println("users不为空!"+ users.size());
        //}
        //根据key判断是否存在
        //if (users.containsKey(String.valueOf("11"))){
        //	System.out.println("有key为11的学生!");
        //}
        //根据value判断是否存在
        //if (users.containsValue(String.valueOf("王强文"))){
        //	System.out.println("有value为[王强文]的学生!");
        //}
        //根据key获取value值
        //System.out.println(users.get("11"));
        //Map数据复制
        //Map<String, String> map= new HashMap<String,String>();
        //map.putAll(users);
        //System.out.println(map);
        //遍历1 推荐这种
        //for(Map.Entry<String,String> entry: users.entrySet()) {
        //	System.out.println("key:"+ entry.getKey()+ " value:"+ entry.getValue());
        //}
        //遍历2
        //for(Map.Entry entry: users.entrySet()) {
        //	System.out.println("key:"+ entry.getKey()+ " value:"+ entry.getValue());
        //}
        //遍历3
        //Iterator it= users.keySet().iterator();
        //while (it.hasNext()) {
        //	String key= it.next().toString();
        //	String value= users.get(key);
        //	System.out.println("key:"+ key+ " value:"+ value);
        //}
        //遍历4
        //for(String key: users.keySet()) {
        //	System.out.println("key:"+ key+ " value:"+ users.get(key));
        //}
    }

}

        3.2 TreeMap

        拥有HashMap的绝大部分方法,且有自己的方法. 主要是一个排序。

package map;

import java.util.*;

public class TreeMapTest {

	public static void main(String[] args) {
		TreeMap<String,String> users= new TreeMap<String,String>();
		//增加元素
		users.put("44", "李元昊");
		users.put("11", "张浩太");
        users.put("33", "王强文");
        users.put("55", "王路路");
        users.put("22", "刘思诚");
        
        //排序 默认是按key值升序
        System.out.println(users);
        //排序 倒序
        //System.out.println(users.descendingMap());
        
        //获取第一个元素
        //System.out.println(users.firstEntry().toString());
        //获取第一个元素key值
        //System.out.println(users.firstEntry().getKey());
        //获取第一个元素value值
        //System.out.println(users.firstEntry().getValue());
        //获取最后一个元素
        //System.out.println(users.lastEntry().toString());
        //获取最后一个元素key值
        //System.out.println(users.lastEntry().getKey());
        //获取最后一个元素value值
        //System.out.println(users.lastEntry().getValue());
        //返回第一个key大于等于33的键值对
        //System.out.println(users.ceilingEntry("33"));
        //返回所有key大于等于33的键值对 tailMap()有第二个参数 默认true 表示包含等于
        //System.out.println(users.tailMap("33"));
        //返回所有key大于等于33的键值对 tailMap()有第二个参数 设置false 表示不包含等于
        //System.out.println(users.tailMap("33", false));
        //返回第一个key小于等于33的键值对
        //System.out.println(users.floorEntry("33"));
        //返回所有key小于33的键值对 headMap()有第二个参数 默认false 表示不包含等于
        //System.out.println(users.headMap("33"));
        //返回所有key小于33的键值对 headMap()有第二个参数 设置true 表示包含等于
        //System.out.println(users.headMap("33", true));
        
        //如果key值重复 实际处理是替换掉了原来的
        //users.put("55", "范清清");
        //System.out.println(users);
        //返回所有value集合
        //System.out.println(users.values());
        //替换1
        //users.replace("11", "王大锤");
        //System.out.println(users);
        //替换2
        //users.replace("22", "刘思诚", "李院长");
        //System.out.println(users);
        //根据key值删除元素
        //users.remove("11");
        //根据key-value值删除元素
        //users.remove("22", "刘思诚");
        //清除列表
        //users.clear();
        //获取列表个数 如果为0 判断为空 也可以通过isEmpty()判断
        //System.out.println("元素个数"+ users.size());
        
        //if (users.isEmpty()) {
        //	System.out.println("users为空!"+ users.size());
        //} else {
        //	System.out.println("users不为空!"+ users.size());
        //}
        //根据key判断是否存在
        //if (users.containsKey(String.valueOf("11"))){
        //	System.out.println("有key为11的学生!");
        //}
        //根据value判断是否存在
        //if (users.containsValue(String.valueOf("王强文"))){
        //	System.out.println("有value为[王强文]的学生!");
        //}
        //根据key获取value值
        //System.out.println(users.get("11"));
        //Map数据复制
        //Map<String, String> map= new TreeMap<String,String>();
        //map.putAll(users);
        //System.out.println(map);
        //遍历1 推荐这种
        //for(Map.Entry<String,String> entry: users.entrySet()) {
        //	System.out.println("key:"+ entry.getKey()+ " value:"+ entry.getValue());
        //}
        //遍历2
        //for(Map.Entry entry: users.entrySet()) {
        //	System.out.println("key:"+ entry.getKey()+ " value:"+ entry.getValue());
        //}
        //遍历3
        //Iterator it= users.keySet().iterator();
        //while (it.hasNext()) {
        //	String key= it.next().toString();
        //	String value= users.get(key);
        //	System.out.println("key:"+ key+ " value:"+ value);
        //}
        //遍历4
        //for(String key: users.keySet()) {
        //	System.out.println("key:"+ key+ " value:"+ users.get(key));
        //}
	}

}

4. 结束

        学习整理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值