关于java中的一个基本问题 感谢各位大牛

qq_33127493 2016-04-13 04:45:57
public class MyHashMap {
LinkedList[] arr= new LinkedList[9];//map 的底层是数组加链表
int size;

public void put(Object key,Object value){
MyEntry e = new MyEntry(key, value);

int a = key.hashCode()%arr.length;
if(arr[a]==null){
LinkedList list=new LinkedList();
arr[a]=list;
list.add(e);
}else{
for(int i=0;i<arr[a].size();i++){
MyEntry e2=(MyEntry) arr[a].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){
for(int i=0;i<arr[a].size();i++){
MyEntry e=(MyEntry) arr[a].get(i);
if(e.Key.equals(key)){
return e.Value;
}
}
}
return null;
}

public static void main(String[] args) {
MyHashMap m = new MyHashMap();
m.put("dcy", new Wife("wy"));
m.put("dcy", new Wife("wy1"));
m.put("zhangsan", new Wife("lisi"));
Wife w=(Wife)m.get("dcy");
System.out.println(w.name);
}
}

class MyEntry{
Objec
t Key;
Object Value;

public MyEntry(Object key, Object value) {
super();
Key = key;
Value = value;
}
}

class Wife{
String name;

public Wife(String name){
this.name=name;
}
}


这个是我写的HashMap类,这样编译是没有问题的 ,但是如果把9改成9以上的数字(如上标红的数字 ),就出出现数组越界的错误(如图标绿的地方) 请问为什么?
...全文
111 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
迷林 2016-04-13
  • 打赏
  • 举报
回复
这位帅哥  下次粘贴代码时用代码块上传上来 不然这样看很难看 别人一看就没心情
迷林 2016-04-13
  • 打赏
  • 举报
回复
private String beginDate;//查询开始日期
	private String parameterName;//查询条件名称
	private String parameterValue;//查询条件值
	private String borrowIds;//导出Excel数据id
	private String endDate;//查询结束日期
飏飏一蝶 2016-04-13
  • 打赏
  • 举报
回复
int a = key.hashCode()%arr.length; hashCode()会有负值,所以取模后还需要取绝对值
qq_25170731 2016-04-13
  • 打赏
  • 举报
回复
你确定这样编译没问题

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧