编写程序,使用泛型技术,自定义泛型类MyLinkedHashMap<K, V>,简单模拟LinkedHashMap集合,实现集合元素的添加(不需要去重)、删除、根据key返回对应的value等功能。
提示:
1、使用2个Object数组分别存储集合元素的key和value对象;删除集合元素时,要将该元素后面的元素整体向前移动1位。
2、自定义的泛型类的形式如下: class MyLinkedHashMap<K, V> { }
3、该泛型类中方法的声明形式如下:
public int size() {} //返回集合中元素个数
public V get(Object key) {} //根据key返回对应的value
public void put(K key, V value) {} //添加集合元素
public void remove(Object key) {} //删除集合元素
public String toString(){} //重写的toString()方法
源代码
以下是使用泛型技术自定义的泛型类MyLinkedHashMap<K, V>的实现,简单模拟LinkedHashMap集合,并实现添加、删除、根据key返回value等功能。
class MyLinkedHashMap<K, V> {
private Object[] keys; // 存储键的数组
private Object[] values; // 存储值的数组
private int size; // 集合中元素个数
public MyLinkedHashMap() {
keys = new Object[16];
values = new Object[16];
size = 0;
}
public int size() {
return size;
}
public V get(Object key) {
for (int i = 0; i < size; i++) {
if (key.equals(keys[i])) {
return (V) values[i];
}
}
return null;
}
public void put(K key, V value) {
// 判断是否已存在相同的key,若存在则替换其对应的value
for (int i = 0; i < size; i++) {
if (key.equals(keys[i])) {
values[i] = value;
return;
}
}
// 扩容数组
if (size == keys.length) {
resize();
}
// 添加新的key-value对
keys[size] = key;
values[size] = value;
size++;
}
public void remove(Object key) {
for (int i = 0; i < size; i++) {
if (key.equals(keys[i])) {
// 将后面的元素整体向前移动1位
System.arraycopy(keys, i + 1, keys, i, size - i - 1);
System.arraycopy(values, i + 1, values, i, size - i - 1);
// 将最后一位设置为null
keys[size - 1] = null;
values[size - 1] = null;
size--;
return;
}
}
}
private void resize() {
int newSize = keys.length * 2;
Object[] newKeys = new Object[newSize];
Object[] newValues = new Object[newSize];
System.arraycopy(keys, 0, newKeys, 0, size);
System.arraycopy(values, 0, newValues, 0, size);
keys = newKeys;
values = newValues;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("{ ");
for (int i = 0; i < size; i++) {
sb.append(keys[i]).append("=").append(values[i]);
if (i != size - 1) {
sb.append(", ");
}
}
sb.append(" }");
return sb.toString();
}
}
在上述代码中,首先创建了两个Object类型的数组keys和values,分别用于存储键和值。size变量记录集合中元素的个数。
实现的方法包括:
size()
:返回集合中元素的个数。get(Object key)
:根据key返回对应的value。遍历keys数组,查找与key相等的元素,并返回对应的values数组中的值。put(K key, V value)
:添加集合元素。如果存在相同的key,则替换对应的value;如果keys数组已满,则进行数组扩容;将新的key-value对添加到末尾。remove(Object key)
:删除集合元素。遍历keys数组,找到与key相等的元素,将其后面的元素整体向前移动1位。resize()
:扩容数组方法。当keys数组已满时,将数组容量扩大为原来的两倍,并将原数组中的元素复制到新数组中。toString()
:重写的toString()方法,用于以字符串形式返回集合的内容。
使用示例:
public class Main {
public static void main(String[] args) {
MyLinkedHashMap<String, Integer> map = new MyLinkedHashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
map.put("D", 4);
System.out.println(map); // 输出: { A=1, B=2, C=3, D=4 }
int value = map.get("C");
System.out.println(value); // 输出: 3
map.remove("B");
System.out.println(map); // 输出: { A=1, C=3, D=4 }
int size = map.size();
System.out.println(size); // 输出: 3
}
}
在示例中,我们创建了一个MyLinkedHashMap对象map
,通过调用put()
方法添加了四对键值对。然后使用toString()
方法输出集合的内容。接着使用get()
方法根据key获取对应的value,并输出。然后使用remove()
方法删除了一个元素,再次输出集合的内容。最后使用size()
方法获取集合中元素的个数并输出。