From a3470899101460445240a08f42351b8acdcdaec5 Mon Sep 17 00:00:00 2001 From: xindoo Date: Fri, 17 Jul 2020 15:50:45 +0800 Subject: [PATCH] update --- pom.xml | 2 +- .../java/xyz/xindoo/slowjson/JSONArray.java | 147 ++++++++++++++++-- .../java/xyz/xindoo/slowjson/JSONObject.java | 40 ++++- 3 files changed, 178 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index 2a448e6..b93e329 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ xyz.xindoo slowjson - 1.0-SNAPSHOT + 1.0.1-SNAPSHOT diff --git a/src/main/java/xyz/xindoo/slowjson/JSONArray.java b/src/main/java/xyz/xindoo/slowjson/JSONArray.java index 42f2409..2b918b7 100644 --- a/src/main/java/xyz/xindoo/slowjson/JSONArray.java +++ b/src/main/java/xyz/xindoo/slowjson/JSONArray.java @@ -4,16 +4,20 @@ import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; import java.util.List; +import java.util.ListIterator; import java.util.stream.Collectors; -public class JSONArray { - private final List list; +public class JSONArray implements List { + private final List list; public JSONArray() { this.list = new ArrayList<>(); } - public JSONArray(List list) { + + public JSONArray(List list) { this.list = new ArrayList<>(list.size()); this.list.addAll(list); } @@ -34,11 +38,7 @@ public class JSONArray { } public JSONObject getJSONObject(int index) { - return list.get(index); - } - - public void add(JSONObject jsonObject) { - list.add(jsonObject); + return (JSONObject) list.get(index); } @Override @@ -49,9 +49,138 @@ public class JSONArray { public String toJSONString() { StringBuilder sb = new StringBuilder(); sb.append("["); - List strList = list.stream().map(JSONObject::toString).collect(Collectors.toList()); + List strList = list.stream().map(Object::toString).collect(Collectors.toList()); sb.append(String.join(",", strList)); sb.append("]"); return sb.toString(); } + + @Override + public boolean add(Object e) { + return this.list.add(e); + } + + @Override + public void add(int index, Object element) { + this.list.add(index, element); + } + + @Override + public Object set(int index, Object element) { + if (index == -1) { + this.list.add(element); + return null; + } else if (this.list.size() > index) { + return this.list.set(index, element); + } else { + for(int i = this.list.size(); i < index; ++i) { + this.list.add((Object)null); + } + + this.list.add(element); + return null; + } + } + + @Override + public Object get(int index) { + return this.list.get(index); + } + + @Override + public boolean addAll(Collection c) { + return this.list.addAll(c); + } + + @Override + public ListIterator listIterator(int index) { + return this.list.listIterator(index); + } + + @Override + public ListIterator listIterator() { + return this.list.listIterator(); + } + + @Override + public int indexOf(Object o) { + return this.list.indexOf(o); + } + + @Override + public int lastIndexOf(Object o) { + return this.list.lastIndexOf(o); + } + + + @Override + public List subList(int fromIndex, int toIndex) { + return this.list.subList(fromIndex, toIndex); + } + + @Override + public void clear() { + this.list.clear(); + } + + @Override + public Object remove(int index) { + return this.list.remove(index); + } + + @Override + public int size() { + return this.list.size(); + } + + @Override + public boolean isEmpty() { + return this.list.isEmpty(); + } + + @Override + public boolean contains(Object o) { + return this.list.contains(o); + } + + @Override + public Iterator iterator() { + return this.list.iterator(); + } + + @Override + public Object[] toArray() { + return this.list.toArray(); + } + + @Override + public T[] toArray(T[] a) { + return this.list.toArray(a); + } + + @Override + public boolean containsAll(Collection c) { + return this.list.containsAll(c); + } + + @Override + public boolean retainAll(Collection c) { + return this.list.retainAll(c); + } + + @Override + public boolean removeAll(Collection c) { + return this.list.removeAll(c); + } + + @Override + public boolean addAll(int index, Collection c) { + return this.list.addAll(index, c); + } + + @Override + public boolean remove(Object o) { + return this.list.remove(o); + } + } diff --git a/src/main/java/xyz/xindoo/slowjson/JSONObject.java b/src/main/java/xyz/xindoo/slowjson/JSONObject.java index 870a2bd..29c6f56 100644 --- a/src/main/java/xyz/xindoo/slowjson/JSONObject.java +++ b/src/main/java/xyz/xindoo/slowjson/JSONObject.java @@ -6,6 +6,7 @@ import org.antlr.v4.runtime.CommonTokenStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.LinkedHashMap; import java.util.Map; import java.util.Random; @@ -15,7 +16,23 @@ public class JSONObject { private Map map; public JSONObject() { - this.map = new HashMap<>(); + this(false); + } + + public JSONObject(Map map) { + if (map == null) { + throw new IllegalArgumentException("map is null."); + } else { + this.map = map; + } + } + + public JSONObject(boolean ordered) { + if (ordered) { + this.map = new LinkedHashMap(); + } else { + this.map = new HashMap(); + } } protected JSONObject(JSONParser.ObjContext objCtx) { @@ -141,4 +158,25 @@ public class JSONObject { float a = random.nextFloat(); } } + + public int size() { + return this.map.size(); + } + + public boolean isEmpty() { + return this.map.isEmpty(); + } + + public boolean containsKey(Object key) { + boolean result = this.map.containsKey(key); + if (!result && key instanceof Number) { + result = this.map.containsKey(key.toString()); + } + + return result; + } + + public boolean containsValue(Object value) { + return this.map.containsValue(value); + } } -- GitLab