第105集:容器、Map和HashMap的基本用法、hashMap和HashTable的区别
本集知识点
remove删除键值对一次删除一对。
HashMap线程不安全效率高,Hashtable线程安全效率低,两者用法一样
-
常用Map方法
Object put(Object key,Object value)
Object get(Object key)
Object remove(Object key)
boolean containsKey(Object key)
boolean containsValue(Object value)
int size()
boolean isEmpty()
void putAll(Map t)
void clear()
package com.collection;
import java.util.HashMap;
import java.util.Map;
/**
* @author wangtao
* 测试Map的基本用法
*/
public class TestMap {
public static void main(String[] args){
Map map = new HashMap();
map.put("www", new Wife("jjjj"));
map.put("fff", new Wife("aaaa"));
//map.remove("www");
Wife w = (Wife)map.get("www");
boolean a = map.containsKey("222");
System.out.println(w.name);
System.out.println(a);
}
}
class Wife {
String name;
public Wife(String name){
this.name = name;
}
}
第106集:容器、Map和HashMap的基本用法、hashMap和HashTable的区别
本集知识点
Map是键值对
通过键找值
键不可重复,后面键对应的值会覆盖前面的值。
package com.collection;
/**
* @author wangtao
* 自定义实现Map功能
* 存放键值对,根据一个对象找另一个对象
*/
public class SxtMap001 {
SxtEntry[] arr = new SxtEntry[990];
int size;
public void put(Object key,Object value){
SxtEntry e = new SxtEntry(key,value);
//解决键值对的处理
for(int i=0;i<size;i++){
if(arr[i].key.equals(key)){
arr[i].value=value;
return;
}
}
arr[size++] = e;
}
public Object get(Object key){
for(int i=0;i<size;i++){
if(arr[i].key.equals(key)){
return arr[i].value;
}
}
return null;
}
public static void main(String[] args){
SxtMap001 m = new SxtMap001();
m.put("高琪", "是是");
m.put("zhen", "DSSS");
m.put("zhen", "ssss");
System.out.println(m.get("zhen"));
}
public boolean containsKey(Object key){
for(int i=0;i<size;i++){
if(arr[i].key.equals(key)){
return true;
}
}
return false;
}
public boolean containsValue(Object value){
for(int i=0;i<size;i++){
if(arr[i].value.equals(value)){
return true;
}
}
return false;
}
}
class SxtEntry{
Object key;
Object value;
public SxtEntry(Object key,Object value){
super();
this.key = key;
this.value = value;
}
}
第107集:容器、自己实现HashMap、Map底层实现、哈希算法实现、使用数组和链表
本集知识点
上一集实现的Map类使用遍历的方式效率低,本集使用的是哈希码查找,效率大幅提升。
Map的底层实现是数组+链表
package com.collection;
import java.util.LinkedList;
public class SxtMap002 {
LinkedList[] arr = new LinkedList[999];
int size;
public void put(Object key,Object value){
SxtEntry e = new SxtEntry(key,value);
int a = key.hashCode()%arr.length;
if(arr[a]==null){
LinkedList list = new LinkedList();
arr[a] = list;
list.add(e);
} else {
LinkedList list = arr[a];
for(int i=0;i<list.size();i++){
SxtEntry e2 = (SxtEntry)list.get(i);
if(e2.key.equals(key)){
e2.value=value;//键值重复直接覆盖。
return;
}
}
arr[a].add(e);
}
}
public Object get(Object key){
int a = key.hashCode()%999;
if(arr[a]!=null){
LinkedList list = arr[a];
for(int i=0;i<list.size();i++){
SxtEntry e = (SxtEntry)list.get(i);
if(e.key.equals(key)){
return e.value;
}
}
}
return null;
}
public static void main(String[] args){
SxtMap001 m = new SxtMap001();
m.put("高琪", "是是");
m.put("zhen", "DSSS");
m.put("zhen", "ssss");
System.out.println(m.get("zhen"));
}
}