Java Map底层实现思路

<pre name="code" class="java">package cn.com.commsoft.map;

/**
 * 
 * @author wengle
 *Java中规定,两个内容相同的对象
 *(指的是通过调用equals方法返回true的对象),应该具有相等的hashcode
 *1、上面的话,相当于equals返回true的两个对象,就具有相同的hashcode,
 *但是具有相同hashcode的对象,通过调用equals方法不一定返回true(Map就是一个例子)
 *2、重写了equals方法,就必须重写hashcode方法,为了保证上面的Java规定
 */




public class MyMap {
	MyEntry[] arr = new MyEntry[100];
	int size;
	/**
	 * 采用hash算法实现map,(每个对象都有一个地址,
	 * 根据地址生成的一个hash码,由于每个对象的地址都不一样,所以
	 * 生成的hash码是唯一的)
	 * @param key
	 * @param value
	 */
	public void put(Object key, Object value){
		MyEntry my = new MyEntry(key, value);
		//相当于地址映射函数,但是会产生地址映射冲突
		int a = (key.hashCode()%100);
		//思路一:当地址冲突时,采用开放地址法处理冲突
		while(arr[a].key != null){
			a++;
		}
		arr[a] = my;
		/*思路二:当地址冲突时,采用链表法处理冲突-->这也是Java采用的设计思想,
		数组加链表(即每个数组元素里面放一个链表)*/
		//第一步:申请一个每个元素是链表的数组
		MapLinkedList[] map = new MapLinkedList[999];
		//第二步:添加元素
		if(map[a] == null){
			MapLinkedList list = new MapLinkedList();
			list.add(e);
			map[a] = list;
		}else{
			map[a].add(e);
		}
	}
	
	public Object get(Object key){
		int a = (key.hashCode()%100);
		return arr[a].value;
	}
}

class MyEntry{
	Object key;
	Object value;
	public MyEntry(Object key, Object value) {
		super();
		this.key = key;
		this.value = value;
	}
	
}


 
内容还会继续更新,敬请关注!
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
package com.MangoMap; //import android.app.Activity; import com.google.android.maps.MapActivity; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.view.View; import android.widget.ListView; import android.widget.SimpleAdapter; import java.text.Collator; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; //MapView Com import com.google.android.maps.MapView; import com.google.android.maps.MapController; import com.google.android.maps.GeoPoint; //import com.google.android.maps. public class MangoMap extends MapActivity { /** Called when the activity is first created. */ private MapView mpv; private MapController mpc; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //地图 mpv = (MapView) findViewById(R.id.map); mpv.setTraffic(true); mpv.setClickable(true); mpv.setScrollContainer(true); mpc = mpv.getController(); GeoPoint gp = new GeoPoint((int) (23.05320 * 1000000), (int) (113.155550 * 1000000)); //地理坐标 mpc.animateTo(gp); mpc.setZoom(15); //mpc. // } @Override protected boolean isRouteDisplayed() { return false; } } //----------------- <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <!-- <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> --> <com.google.android.maps.MapView android:id="@+id/map" android:layout_width="fill_parent" android:layout_height="fill_parent" android:enabled="true" android:clickable="true" android:apiKey="YOUR API key" /> <Button android:text="@+id/Button01" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> </LinearLayout> //--------------------- <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.MangoMap" android:versionCode="1" android:versionName="1.0"> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <uses-library android:name="com.google.android.maps" /> <activity android:name=".MangoMap" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="3" /> </manifest>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值