📄 flat3map.java
字号:
}
public void remove() {
if (canRemove == false) {
throw new IllegalStateException(AbstractHashedMap.REMOVE_INVALID);
}
parent.remove(getKey());
nextIndex--;
canRemove = false;
}
public Object getKey() {
if (canRemove == false) {
throw new IllegalStateException(AbstractHashedMap.GETKEY_INVALID);
}
switch (nextIndex) {
case 3:
return parent.key3;
case 2:
return parent.key2;
case 1:
return parent.key1;
}
throw new IllegalStateException("Invalid map index");
}
public Object getValue() {
if (canRemove == false) {
throw new IllegalStateException(AbstractHashedMap.GETVALUE_INVALID);
}
switch (nextIndex) {
case 3:
return parent.value3;
case 2:
return parent.value2;
case 1:
return parent.value1;
}
throw new IllegalStateException("Invalid map index");
}
public Object setValue(Object value) {
if (canRemove == false) {
throw new IllegalStateException(AbstractHashedMap.SETVALUE_INVALID);
}
Object old = getValue();
switch (nextIndex) {
case 3:
parent.value3 = value;
case 2:
parent.value2 = value;
case 1:
parent.value1 = value;
}
return old;
}
public boolean equals(Object obj) {
if (canRemove == false) {
return false;
}
if (obj instanceof Map.Entry == false) {
return false;
}
Map.Entry other = (Map.Entry) obj;
Object key = getKey();
Object value = getValue();
return (key == null ? other.getKey() == null : key.equals(other.getKey())) &&
(value == null ? other.getValue() == null : value.equals(other.getValue()));
}
public int hashCode() {
if (canRemove == false) {
return 0;
}
Object key = getKey();
Object value = getValue();
return (key == null ? 0 : key.hashCode()) ^
(value == null ? 0 : value.hashCode());
}
public String toString() {
if (canRemove) {
return getKey() + "=" + getValue();
} else {
return "";
}
}
}
/**
* Gets the keySet view of the map.
* Changes made to the view affect this map.
* To simply iterate through the keys, use {@link #mapIterator()}.
*
* @return the keySet view
*/
public Set keySet() {
if (delegateMap != null) {
return delegateMap.keySet();
}
return new KeySet(this);
}
/**
* KeySet
*/
static class KeySet extends AbstractSet {
private final Flat3Map parent;
KeySet(Flat3Map parent) {
super();
this.parent = parent;
}
public int size() {
return parent.size();
}
public void clear() {
parent.clear();
}
public boolean contains(Object key) {
return parent.containsKey(key);
}
public boolean remove(Object key) {
boolean result = parent.containsKey(key);
parent.remove(key);
return result;
}
public Iterator iterator() {
if (parent.delegateMap != null) {
return parent.delegateMap.keySet().iterator();
}
if (parent.size() == 0) {
return EmptyIterator.INSTANCE;
}
return new KeySetIterator(parent);
}
}
/**
* KeySetIterator
*/
static class KeySetIterator extends EntrySetIterator {
KeySetIterator(Flat3Map parent) {
super(parent);
}
public Object next() {
super.next();
return getKey();
}
}
/**
* Gets the values view of the map.
* Changes made to the view affect this map.
* To simply iterate through the values, use {@link #mapIterator()}.
*
* @return the values view
*/
public Collection values() {
if (delegateMap != null) {
return delegateMap.values();
}
return new Values(this);
}
/**
* Values
*/
static class Values extends AbstractCollection {
private final Flat3Map parent;
Values(Flat3Map parent) {
super();
this.parent = parent;
}
public int size() {
return parent.size();
}
public void clear() {
parent.clear();
}
public boolean contains(Object value) {
return parent.containsValue(value);
}
public Iterator iterator() {
if (parent.delegateMap != null) {
return parent.delegateMap.values().iterator();
}
if (parent.size() == 0) {
return EmptyIterator.INSTANCE;
}
return new ValuesIterator(parent);
}
}
/**
* ValuesIterator
*/
static class ValuesIterator extends EntrySetIterator {
ValuesIterator(Flat3Map parent) {
super(parent);
}
public Object next() {
super.next();
return getValue();
}
}
//-----------------------------------------------------------------------
/**
* Write the map out using a custom routine.
*/
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
out.writeInt(size());
for (MapIterator it = mapIterator(); it.hasNext();) {
out.writeObject(it.next()); // key
out.writeObject(it.getValue()); // value
}
}
/**
* Read the map in using a custom routine.
*/
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
int count = in.readInt();
if (count > 3) {
delegateMap = createDelegateMap();
}
for (int i = count; i > 0; i--) {
put(in.readObject(), in.readObject());
}
}
//-----------------------------------------------------------------------
/**
* Clones the map without cloning the keys or values.
*
* @return a shallow clone
* @since Commons Collections 3.1
*/
public Object clone() {
try {
Flat3Map cloned = (Flat3Map) super.clone();
if (cloned.delegateMap != null) {
cloned.delegateMap = (HashedMap) cloned.delegateMap.clone();
}
return cloned;
} catch (CloneNotSupportedException ex) {
throw new InternalError();
}
}
/**
* Compares this map with another.
*
* @param obj the object to compare to
* @return true if equal
*/
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (delegateMap != null) {
return delegateMap.equals(obj);
}
if (obj instanceof Map == false) {
return false;
}
Map other = (Map) obj;
if (size != other.size()) {
return false;
}
if (size > 0) {
Object otherValue = null;
switch (size) { // drop through
case 3:
if (other.containsKey(key3) == false) {
otherValue = other.get(key3);
if (value3 == null ? otherValue != null : !value3.equals(otherValue)) {
return false;
}
}
case 2:
if (other.containsKey(key2) == false) {
otherValue = other.get(key2);
if (value2 == null ? otherValue != null : !value2.equals(otherValue)) {
return false;
}
}
case 1:
if (other.containsKey(key1) == false) {
otherValue = other.get(key1);
if (value1 == null ? otherValue != null : !value1.equals(otherValue)) {
return false;
}
}
}
}
return true;
}
/**
* Gets the standard Map hashCode.
*
* @return the hash code defined in the Map interface
*/
public int hashCode() {
if (delegateMap != null) {
return delegateMap.hashCode();
}
int total = 0;
switch (size) { // drop through
case 3:
total += (hash3 ^ (value3 == null ? 0 : value3.hashCode()));
case 2:
total += (hash2 ^ (value2 == null ? 0 : value2.hashCode()));
case 1:
total += (hash1 ^ (value1 == null ? 0 : value1.hashCode()));
}
return total;
}
/**
* Gets the map as a String.
*
* @return a string version of the map
*/
public String toString() {
if (delegateMap != null) {
return delegateMap.toString();
}
if (size == 0) {
return "{}";
}
StringBuffer buf = new StringBuffer(128);
buf.append('{');
switch (size) { // drop through
case 3:
buf.append((key3 == this ? "(this Map)" : key3));
buf.append('=');
buf.append((value3 == this ? "(this Map)" : value3));
buf.append(',');
case 2:
buf.append((key2 == this ? "(this Map)" : key2));
buf.append('=');
buf.append((value2 == this ? "(this Map)" : value2));
buf.append(',');
case 1:
buf.append((key1 == this ? "(this Map)" : key1));
buf.append('=');
buf.append((value1 == this ? "(this Map)" : value1));
}
buf.append('}');
return buf.toString();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -