diff core/src/luan/AbstractLuanTable.java @ 284:8870840251ea

use LinkedHashMap in LuanTable to preserve order git-svn-id: https://luan-java.googlecode.com/svn/trunk@285 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Tue, 02 Dec 2014 03:55:33 +0000
parents 8afe9f2fdfec
children 9fb523472035
line wrap: on
line diff
--- a/core/src/luan/AbstractLuanTable.java	Tue Dec 02 03:34:04 2014 +0000
+++ b/core/src/luan/AbstractLuanTable.java	Tue Dec 02 03:55:33 2014 +0000
@@ -3,7 +3,7 @@
 import java.util.Iterator;
 import java.util.ListIterator;
 import java.util.Map;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -16,6 +16,14 @@
 
 public abstract class AbstractLuanTable implements LuanTable {
 
+	protected final Map<Object,Object> newMap() {
+		return new LinkedHashMap<Object,Object>();
+	}
+
+	protected final Map<Object,Object> newMap(Map<Object,Object> map) {
+		return new LinkedHashMap<Object,Object>(map);
+	}
+
 	@Override public boolean isEmpty() {
 		return isList() && length()==0;
 	}
@@ -29,7 +37,7 @@
 	}
 
 	@Override public Map<Object,Object> asMap() {
-		Map<Object,Object> map = new HashMap<Object,Object>();
+		Map<Object,Object> map = newMap();
 		for( Map.Entry<Object,Object> entry : this ) {
 			map.put(entry.getKey(),entry.getValue());
 		}
@@ -78,6 +86,6 @@
 	}
 
 	@Override public LuanTable cloneTable() {
-		return isList() ? new LuanTableImpl(new ArrayList<Object>(asList())) : new LuanTableImpl(new HashMap<Object,Object>(asMap()));
+		return isList() ? new LuanTableImpl(new ArrayList<Object>(asList())) : new LuanTableImpl(newMap(asMap()));
 	}
 }