Map.java
package co.nstant.in.cbor.model;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
public class Map extends ChunkableDataItem {
private final HashMap<DataItem, DataItem> map;
private final List<DataItem> keys = new LinkedList<>();
public Map() {
super(MajorType.MAP);
map = new HashMap<>();
}
public Map(int initialCapacity) {
super(MajorType.MAP);
map = new HashMap<>(initialCapacity);
}
public Map put(DataItem key, DataItem value) {
if (map.put(key, value) == null) {
keys.add(key);
}
return this;
}
public DataItem get(DataItem key) {
return map.get(key);
}
public DataItem remove(DataItem key) {
keys.remove(key);
return map.remove(key);
}
public Collection<DataItem> getKeys() {
return keys;
}
public Collection<DataItem> getValues() {
return map.values();
}
@Override
public boolean equals(Object object) {
if (object instanceof Map) {
Map other = (Map) object;
return super.equals(object) && map.equals(other.map);
}
return false;
}
@Override
public int hashCode() {
return super.hashCode() ^ map.hashCode();
}
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder();
if (isChunked()) {
stringBuilder.append("{_ ");
} else {
stringBuilder.append("{ ");
}
for (DataItem key : keys) {
stringBuilder.append(key).append(": ").append(map.get(key)).append(", ");
}
if (stringBuilder.toString().endsWith(", ")) {
stringBuilder.setLength(stringBuilder.length() - 2);
}
stringBuilder.append(" }");
return stringBuilder.toString();
}
}