Hashmap不能用基本的数据类型 Dimensions expected after this token

本文介绍了Java中HashMap的基本用法,重点讲述了如何正确地定义HashMap,特别是对于键类型的使用,区分了原始类型与引用类型的不同之处。

原文地址:http://moto0421.iteye.com/blog/1143777


今天试了一下HahsMap,
采用如下形似定义
(这个下面是用了csdn的一位同仁的文章,仅作为讲解参考,请见谅)
  1. HashMap<int,String> map=new HashMap<int,String>();  
  2. map.put(1,"a");  
  3. map.put(2,"b");  
  4. map.put(1,"aq");  
  5. System.out.println(map.get(0));  
  6. System.out.println(map.get(1));  
  7. System.out.println(map.get(2));  


报错:Syntax error on token "int", Dimensions expected after this token


原因:引用类型原始类型没有搞清楚!

Java 提供两种不同的类型:引用类型原始类型(或内置类型)Intjava的原始数据类型,Integerjavaint提供的封装类。Java为每个原始类型提供了封装类。

原始类型   封装类

boolean      Boolean

char           Character

byte           Byte

short          Short

int              Integer

long           Long

float           Float

double      Double

引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。


  1. HashMap<Integer,String> map=new HashMap<Integer,String>();  
  2. map.put(1,"a");  
  3. map.put(2,"b");  
  4. map.put(1,"aq");  
  5. System.out.println(map.get(0));  
  6. System.out.println(map.get(1));  
  7. System.out.println(map.get(2));  

Java 中的 `HashMap` 是一个非常常用的集合类,用于存储键值对(Key-Value Pair),其灵活性在于支持多种数据类型作为键和值。 ### 键的数据类型 `HashMap` 的键可以是任何实现了 `equals()` 和 `hashCode()` 方法的对象。因为 `HashMap` 依赖这两个方法来决定键的存储位置以及如何检索对应的值。以下是一些常见的键类型: - **基本类型的包装类**:如 `Integer`、`Double`、`Boolean` 等。 - **字符串类型**:`String` 类型是使用最广泛的键类型之一,因其不可变性,适合用作哈希键。 - **自定义对象**:开发者也可以使用自定义类的对象作为键,但必须确保该类正确重写了 `equals()` 和 `hashCode()` 方法。 - **枚举类型**:`Enum` 类型也可以作为 `HashMap` 的键[^2]。 ### 值的数据类型 与键相比,值的限制更少,因为它们不参与哈希计算。因此,值可以是任意类型,包括但不限于: - **基本类型的包装类** - **字符串** - **数组** - **集合类**:如 `ArrayList`、`HashSet` 等 - **自定义对象** - **其他 `Map` 实例** ### 示例代码 下面是一个展示不同类型键值使用的简单示例: ```java import java.util.HashMap; import java.util.Map; public class HashMapExample { public static void main(String[] args) { // 创建一个HashMap实例 Map<Object, Object> map = new HashMap<>(); // 使用不同类型的键和值 map.put(1, "Integer Key"); map.put("String Key", 100); map.put(true, new int[]{1, 2, 3}); // 自定义类作为键 Person personKey = new Person("John Doe"); map.put(personKey, "Custom Object Key"); // 打印map内容 for (Map.Entry<Object, Object> entry : map.entrySet()) { System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue()); } } static class Person { private String name; public Person(String name) { this.name = name; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return name.equals(person.name); } @Override public int hashCode() { return name.hashCode(); } @Override public String toString() { return "Person{name='" + name + "'}"; } } } ``` 在这个例子中,展示了如何使用 `Integer`、`String`、`Boolean` 和自定义类 `Person` 作为键,以及各种类型作为值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值