Closed CaveNightingale closed 4 years ago
已解决,请核对
**Map** 是一种以 `<Key,Value>` 的形式映射数据的集合,就是说,一个 `Key` 对应一个 `Value`,但是 `Key` 不可重复,`Value` 可重复
**HashMap** 是 **Map** 的一个重要实现类,也是最常用的,基于哈希表实现,接下来将展示一下 **HashMap** 和 **Map** 的使用方法,以下两种方法中,**HashMap** 在只有一个线程的时候,访问效率较高,所以在 **Bukkit** 开发的时候,我们常用 **HashMap**,当然,我们可以这么用,两者都一样,但是前者在变动的时候,方便维护,隔离性强,而后者在变动的时候,维护更加麻烦
```javascript
public static Map<String, Integer> map1 = new HashMap<String, Integer>();
public static HashMap<String, Integer> map2 = new HashMap<>();
map1.put("String1", 1);
map2.put("String2", 2);
map1.get("String1");
map2.get("String2");
两种方式在任何时候的时候,访问没有区别 "方便维护"这个描述有歧义,是指插入&删除值的时间复杂度低呢,还是指代码容易改动?望说明
"以下两种方法中,HashMap 在只有一个线程的时候,访问效率较高" 首先,没有效率谁高这种事,由于对象的实际类型都是HashMap,因此时间复杂度相等,没有效率上的差别 其次,HashMap本身就是为单线程设计的,它没有互斥锁,因此试图在多个线程中操作HashMap是不合理的操作
Map是个接口,HashMap实现了Map接口,你这俩调用的都是HashMap#put(String, Integer)和HashMap#get(String)怎么会有区别呢,你这也太扯了吧,其次集合是Set而不是Map,Map是映射