Flex 만들어쓰는 Hashtable 입니다. Enjoy/FLEX2008. 9. 29. 09:21
본문 :
http://cafe.naver.com/flexcomponent/5679
플렉스에서는 동적 프라퍼티가 있어서 따로 맵 API 를 제공하지 않더라구요.
그래서 하나 만들었습니다. 저도 자바 개발자라서, 가장 자주 쓰는 게 없으니까 불편하더군요.
Object 의 동적 프라퍼티 기능을 이용해서 자바의 Hashtable 과 동일한 API 를
구현했습니다.
/**
* File : Hashtable.as
* @author 이경빈 (Kevin Lee)
* @version $Revision: 1.1 $, $Date: 2007/03/18 22:10:14 $
*/
package godai.util.dictionary
{
import mx.collections.ArrayCollection;
/**
*
*
*/
public class Hashtable
{
private var table:Object;
private var keyArray:Array;
private var valueArray:Array;
public function Hashtable() {
table = new Object();
keyArray = new Array();
valueArray = new Array();
}
public function clear():void {
table = new Object();
keyArray = new Array();
valueArray = new Array();
}
public function clone():Hashtable {
var result:Hashtable = new Hashtable();
for (var i:int = 0; i < keyArray.length; i++) {
var key:Object = keyArray[i];
var value:Object = getValue(key);
result.put(key, value);
}
return result;
}
public function containsKey(key:Object):Boolean {
if (getValue(key) == undefined) {
return false;
} else if ( getValue(key) == null) {
return false;
} else {
return true;
}
}
public function containsValue(value:Object):Boolean {
// 귀찮아서 미구현 ;;
}
public function getKeyArray():Array {
return keyArray;
}
public function getValueArray():Array {
return valueArray;
}
public function getValue(key:Object):Object {
if (key == null) {
throw new Error("[Hashtable] key is null!");
return null;
}
return table[key.toString()];
}
public function isEmpty():Boolean {
if (keyArray.length == 0) {
return true;
} else {
return false;
}
}
public function put(key:Object, value:Object):Object {
if (key == null) {
throw new Error("[Hashtable] key is null!");
return null;
}
if (value == null) {
throw new Error("[Hashtable] value is null!");
return null;
}
var result:Object = getValue(key);
if (result == null) {
keyArray.push(key);
} else {
var tempIdx:int = findIdx(valueArray, value);
if (tempIdx < 0) {
// ASSERTION tempIdx must > -1
} else {
valueArray.splice(tempIdx, 1);
}
valueArray.push(value);
}
table[key.toString()] = value;
return result;
}
public function remove(key:Object):Object {
var removedValue:Object = getValue(key);
if (removedValue == null) {
return removedValue;
}
delete table[key.toString()];
var removedKeyIdx:int = findIdx(keyArray, key);
keyArray.splice(removedKeyIdx, 1);
var removedValueIdx:int = findIdx(valueArray, removedValue);
valueArray.splice(removedValueIdx, 1);
return removedValue;
}
private function findIdx(arr:Array, value:Object):int {
for (var i:int = 0; i < arr.length; i++) {
if (value === arr[i]) {
return i;
}
}
return -1;
}
}
}