这一章节我们来使用数组模拟一下Map,了解一下Map的创建。
1.Map是什么?
Map,映射表,也叫关联数组,维护“键-值”的关联。
2.使用数组模拟Map
package com.ray.ch15;
import java.util.HashSet;
import java.util.Set;
public class Test<T> {
public static void main(String[] args) {
AssociativeArray<String, String> map = new AssociativeArray<String, String>(
2);
map.put("one", "1");
map.put("two", "2");
try {
map.put("three", "3");
} catch (Exception e) {
System.out.println("too many objects");
}
for (String key : map.getKeySet()) {
System.out.println(map.getByKey(key));
}
}
}
class AssociativeArray<K, V> {
private Object[][] objects;
private int index = 0;
public AssociativeArray(int count) {
objects = new Object[count][2];
}
public void put(K key, V value) {
if (index >= objects.length) {
throw new ArrayIndexOutOfBoundsException();
}
objects[index++] = new Object[] { key, value };
}
public Set<K> getKeySet() {
Set<K> set = new HashSet<K>();
for (int i = 0; i < objects.length; i++) {
set.add((K) objects[i][0]);
}
return set;
}
@SuppressWarnings("unchecked")
public V getByKey(K key) {
V v = null;
for (int i = 0; i < objects.length; i++) {
if (objects[i][0] == key) {
v = (V) objects[i][1];
}
}
return v;
}
}
输出:
too many objects
2
1
上面的代码使用数组来模拟了Map的创建。
解释:
(1)上面使用Object数组来作为底层数据存储结构
(2)通过数组的赋值实现get方法
(3)通过遍历数组实现getKeyset和get方法
注意:
上面的代码是最简单的实现,没有经过任何的优化,存在各种的问题,我们将在后面结束java是通过什么实现来进行优化的。
总结:我们这一章节主要介绍怎样使用数组来简单模拟map的创建。
这一章节就到这里,谢谢。
-----------------------------------