ElaBosak233 / Valkyrie

一个面向中文社区的 Bukkit / Spigot 插件开发教程
https://valkyrie.ela.ac.cn
MIT License
27 stars 3 forks source link

集合类 #3

Closed CaveNightingale closed 4 years ago

CaveNightingale commented 4 years ago

Map是个接口,HashMap实现了Map接口,你这俩调用的都是HashMap#put(String, Integer)和HashMap#get(String)怎么会有区别呢,你这也太扯了吧,其次集合是Set而不是Map,Map是映射


集合 Map & HashMap

Map 和 HashMap 都是一种以 <Key,Value> 形式存储数据的数据结构,就是说,一个 Key 对应一个 Value,但先讲一下 Map 和 HashMap 的区别,简单来说,Map 就是一种 Key 不可重复,Value 可重复集合,而 HashMap 跟 Map 一样,但 HashMap 在只有一个线程的时候,访问效率较高,所以在 Bukkit 开发的时候,我们常用 HashMap,当然,我们可以这么用,两者都一样,但是前者在变动的时候,方便维护,隔离性强,而后者在变动的时候,维护更加麻烦

public static Map<String, Integer> map1 = new HashMap<String, Integer>();
public static HashMap<String, Integer> map2 = new HashMap<>();

放值

map1.put("String", 1);
map2.put("String", 2);

取值

map1.get("String");
map2.get("String");
ElaBosak233 commented 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");
CaveNightingale commented 4 years ago

两种方式在任何时候的时候,访问没有区别 "方便维护"这个描述有歧义,是指插入&删除值的时间复杂度低呢,还是指代码容易改动?望说明

CaveNightingale commented 4 years ago

"以下两种方法中,HashMap 在只有一个线程的时候,访问效率较高" 首先,没有效率谁高这种事,由于对象的实际类型都是HashMap,因此时间复杂度相等,没有效率上的差别 其次,HashMap本身就是为单线程设计的,它没有互斥锁,因此试图在多个线程中操作HashMap是不合理的操作