基於ArrayList實現HashMap程式碼
package hashMap;
import java.util.ArrayList;
import java.util.List;
/**
* 基於ArrayList的實現hashMap
* 效率不高 新增 刪除 查詢 太多迴圈 從頭查到尾
* @author 蔣子文
*
*/
public class HashMapForArrayList <Key,Value>{
private List<Entry<Key,Value>> tables = new ArrayList<Entry<Key, Value>>() ;
/*
* 先判斷這個key是否存在??
* 如果存在的話就直接講之前的value覆蓋就行 不存在的話就直接新增
*/
public void put(Key key, Value value) {
Entry<Key, Value> entry = new Entry<Key, Value>(key, value);
for(Entry<Key, Value> entry2 : tables) {
if(entry.key.equals(entry2.key)) {
entry2.value = entry.value;
return ;
}
}
tables.add(entry);
}
//通過key返回一個value 還寫得不好 這裡面不應該直接去訪問key 和 value 應該要將這兩個封裝起來
public Value get(Key key) {
for(Entry<Key, Value> entry : tables) {
if(entry.key.equals(key)) {
return entry.value;
}
}
return null;
}
//remove方法
public void remove(Key key) {
for(Entry<Key, Value> entry : tables) {
if(entry.key.equals(key)) {
tables.remove(entry);
}
}
}
/*
* 重要的類 entry 主要用於存放Map中的值
*/
static class Entry<Key , Value>{
Key key;
Value value;
//構造方法
public Entry(Key key, Value value) {
super();
this.key = key;
this.value = value;
}
}
//如果我們新增的元素是一個這樣的物件
static class User {
private String name ;
private int age;
public User(String name, int age) {
this.age = age;
this.name = name;
}
/*
* 在set集合中常用,在map中不常用
*/
public boolean equals(User user) {
if(this.name.equals(user.name) && this.age == user.age)
return true;
return false;
}
}
public static void main(String[] args) {
HashMapForArrayList<String, User> hashMap = new HashMapForArrayList<String ,User>();
User user1 = new User("jzw", 10);
User user2 = new User("jzw", 10);
User user3 = new User("jzw", 20);
hashMap.put("1" , user1);
hashMap.put("2" , user2);
hashMap.put("3" , user3);
System.out.println(hashMap.get("1"));
//System.out.println(hashMap);
System.out.println(hashMap.get("2"));
}
}