自定义Map类的版本SxtMap
来源:互联网 发布:c语言基础 编辑:程序博客网 时间:2024/06/06 01:34
Map 的底层实现:链表+数组
就是余数相同的放在a[0]用链表连起来a[1],a[2],这样在形成一个数组,链表数组
public class SxtMap002 {
LinkedList[] arr=new LinkedList[999];//链表数组,map的底层实现:链表加数组
int size;
public void put(Object key,Object value){
SxtEntry e=new SxtEntry(key,value);
int hash=key.hashCode();
hash=hash<0?-hash:hash;//不让hash为负数
int a=hash%arr.length;//hash取余则是0-999
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()%arr.length;
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) {
SxtMap002 m=new SxtMap002();
m.put("张三",new Wife("杨幂"));
m.put("李四",new Wife("王菲"));
m.put("李四",new Wife("杨幂"));
Wife w=(Wife)m.get("张三");
System.out.println(w.name);
}
}
class Wife{
String name;
public Wife(String name){
this.name=name;
}
}
class SxtEntry{
Object key;
Object value;
public SxtEntry(Object key,Object vlaue){
this.key=key;
this.value=vlaue;
}
public SxtEntry(){
}
}
一个高效检索节点的代码
public Node node(int index){
Node temp=null;//临时变量
if(first!=null){
if(index<(size>>1)){
temp=first;
for(int i=0;i<index;i++){
temp=temp.next;
}
}
else{
temp=last;
for(int i=size-1;i>index;i--){
temp=temp.previous;
}
}
}
return temp;
}
- 自定义Map类的版本SxtMap
- 自定义map的排序
- 第一题的map版本
- 【JavaDemo】使用key遍历含自定义类的Map集合
- 【JavaDemo】使用Entry遍历含自定义类的Map集合
- Bing Map 自定义操作类
- JS自定义一个Map类
- JS自定义一个Map类
- JS自定义一个Map类
- js自定义一个Map类
- js自定义一个map类
- 自定义的Title(VBS版本)
- 自定义MAP
- 自定义的数据源实现site map provider
- key为自定义结构的map
- map的键使用自定义结构体
- c++ 自定义排序函数的 map
- 自定义Map集合的两种方式
- C++排序算法之冒泡排序
- KMP 模板
- [LeetCode]28. Implement strStr()
- Alice and Bob(山东省第四届ACM大学生程序设计竞赛 )
- 一分钟了解负载均衡的一切
- 自定义Map类的版本SxtMap
- mysql安装及utf8编码的设置
- 基础加强,Javaweb进入尾声
- Sublime Text 3 快捷键汇总
- 配置Tomcat使用https协议
- 如何将Java程序转换成exe文件?
- 每天学一点Swift----闭包(一)
- TensorFlow的一些基本概念
- 使用RAII技术来管理资源