jimu-decompiled/sources/com/google/common/collect/LinkedHashMultimap.java
2025-05-13 19:24:51 +02:00

516 lines
20 KiB
Java

package com.google.common.collect;
import com.google.common.base.Objects;
import com.google.common.collect.Sets;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Arrays;
import java.util.Collection;
import java.util.ConcurrentModificationException;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
/* loaded from: classes.dex */
public final class LinkedHashMultimap<K, V> extends LinkedHashMultimapGwtSerializationDependencies<K, V> {
private static final int DEFAULT_KEY_CAPACITY = 16;
private static final int DEFAULT_VALUE_SET_CAPACITY = 2;
static final double VALUE_SET_LOAD_FACTOR = 1.0d;
private static final long serialVersionUID = 1;
private transient ValueEntry<K, V> multimapHeaderEntry;
transient int valueSetCapacity;
static final class ValueEntry<K, V> extends ImmutableEntry<K, V> implements ValueSetLink<K, V> {
final int c;
ValueEntry<K, V> d;
ValueSetLink<K, V> e;
ValueSetLink<K, V> f;
ValueEntry<K, V> g;
ValueEntry<K, V> h;
ValueEntry(K k, V v, int i, ValueEntry<K, V> valueEntry) {
super(k, v);
this.c = i;
this.d = valueEntry;
}
boolean a(Object obj, int i) {
return this.c == i && Objects.a(getValue(), obj);
}
@Override // com.google.common.collect.LinkedHashMultimap.ValueSetLink
public ValueSetLink<K, V> b() {
return this.f;
}
public ValueEntry<K, V> c() {
return this.g;
}
public ValueEntry<K, V> d() {
return this.h;
}
@Override // com.google.common.collect.LinkedHashMultimap.ValueSetLink
public ValueSetLink<K, V> a() {
return this.e;
}
@Override // com.google.common.collect.LinkedHashMultimap.ValueSetLink
public void b(ValueSetLink<K, V> valueSetLink) {
this.e = valueSetLink;
}
@Override // com.google.common.collect.LinkedHashMultimap.ValueSetLink
public void a(ValueSetLink<K, V> valueSetLink) {
this.f = valueSetLink;
}
public void b(ValueEntry<K, V> valueEntry) {
this.h = valueEntry;
}
public void a(ValueEntry<K, V> valueEntry) {
this.g = valueEntry;
}
}
final class ValueSet extends Sets.ImprovedAbstractSet<V> implements ValueSetLink<K, V> {
private final K a;
ValueEntry<K, V>[] b;
private int c = 0;
private int d = 0;
private ValueSetLink<K, V> e = this;
private ValueSetLink<K, V> f = this;
ValueSet(K k, int i) {
this.a = k;
this.b = new ValueEntry[Hashing.a(i, LinkedHashMultimap.VALUE_SET_LOAD_FACTOR)];
}
private int c() {
return this.b.length - 1;
}
private void d() {
if (Hashing.a(this.c, this.b.length, LinkedHashMultimap.VALUE_SET_LOAD_FACTOR)) {
ValueEntry<K, V>[] valueEntryArr = new ValueEntry[this.b.length * 2];
this.b = valueEntryArr;
int length = valueEntryArr.length - 1;
for (ValueSetLink<K, V> valueSetLink = this.e; valueSetLink != this; valueSetLink = valueSetLink.b()) {
ValueEntry<K, V> valueEntry = (ValueEntry) valueSetLink;
int i = valueEntry.c & length;
valueEntry.d = valueEntryArr[i];
valueEntryArr[i] = valueEntry;
}
}
}
@Override // java.util.AbstractCollection, java.util.Collection, java.util.Set
public boolean add(V v) {
int a = Hashing.a(v);
int c = c() & a;
ValueEntry<K, V> valueEntry = this.b[c];
for (ValueEntry<K, V> valueEntry2 = valueEntry; valueEntry2 != null; valueEntry2 = valueEntry2.d) {
if (valueEntry2.a(v, a)) {
return false;
}
}
ValueEntry<K, V> valueEntry3 = new ValueEntry<>(this.a, v, a, valueEntry);
LinkedHashMultimap.succeedsInValueSet(this.f, valueEntry3);
LinkedHashMultimap.succeedsInValueSet(valueEntry3, this);
LinkedHashMultimap.succeedsInMultimap(LinkedHashMultimap.this.multimapHeaderEntry.c(), valueEntry3);
LinkedHashMultimap.succeedsInMultimap(valueEntry3, LinkedHashMultimap.this.multimapHeaderEntry);
this.b[c] = valueEntry3;
this.c++;
this.d++;
d();
return true;
}
@Override // java.util.AbstractCollection, java.util.Collection, java.util.Set
public void clear() {
Arrays.fill(this.b, (Object) null);
this.c = 0;
for (ValueSetLink<K, V> valueSetLink = this.e; valueSetLink != this; valueSetLink = valueSetLink.b()) {
LinkedHashMultimap.deleteFromMultimap((ValueEntry) valueSetLink);
}
LinkedHashMultimap.succeedsInValueSet(this, this);
this.d++;
}
@Override // java.util.AbstractCollection, java.util.Collection, java.util.Set
public boolean contains(Object obj) {
int a = Hashing.a(obj);
for (ValueEntry<K, V> valueEntry = this.b[c() & a]; valueEntry != null; valueEntry = valueEntry.d) {
if (valueEntry.a(obj, a)) {
return true;
}
}
return false;
}
@Override // java.util.AbstractCollection, java.util.Collection, java.lang.Iterable, java.util.Set
public Iterator<V> iterator() {
return new Iterator<V>() { // from class: com.google.common.collect.LinkedHashMultimap.ValueSet.1
ValueSetLink<K, V> a;
ValueEntry<K, V> b;
int c;
{
this.a = ValueSet.this.e;
this.c = ValueSet.this.d;
}
private void a() {
if (ValueSet.this.d != this.c) {
throw new ConcurrentModificationException();
}
}
@Override // java.util.Iterator
public boolean hasNext() {
a();
return this.a != ValueSet.this;
}
@Override // java.util.Iterator
public V next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
ValueEntry<K, V> valueEntry = (ValueEntry) this.a;
V value = valueEntry.getValue();
this.b = valueEntry;
this.a = valueEntry.b();
return value;
}
@Override // java.util.Iterator
public void remove() {
a();
CollectPreconditions.a(this.b != null);
ValueSet.this.remove(this.b.getValue());
this.c = ValueSet.this.d;
this.b = null;
}
};
}
@Override // java.util.AbstractCollection, java.util.Collection, java.util.Set
public boolean remove(Object obj) {
int a = Hashing.a(obj);
int c = c() & a;
ValueEntry<K, V> valueEntry = this.b[c];
ValueEntry<K, V> valueEntry2 = null;
while (true) {
ValueEntry<K, V> valueEntry3 = valueEntry2;
valueEntry2 = valueEntry;
if (valueEntry2 == null) {
return false;
}
if (valueEntry2.a(obj, a)) {
if (valueEntry3 == null) {
this.b[c] = valueEntry2.d;
} else {
valueEntry3.d = valueEntry2.d;
}
LinkedHashMultimap.deleteFromValueSet(valueEntry2);
LinkedHashMultimap.deleteFromMultimap(valueEntry2);
this.c--;
this.d++;
return true;
}
valueEntry = valueEntry2.d;
}
}
@Override // java.util.AbstractCollection, java.util.Collection, java.util.Set
public int size() {
return this.c;
}
@Override // com.google.common.collect.LinkedHashMultimap.ValueSetLink
public ValueSetLink<K, V> a() {
return this.f;
}
@Override // com.google.common.collect.LinkedHashMultimap.ValueSetLink
public ValueSetLink<K, V> b() {
return this.e;
}
@Override // com.google.common.collect.LinkedHashMultimap.ValueSetLink
public void a(ValueSetLink<K, V> valueSetLink) {
this.e = valueSetLink;
}
@Override // com.google.common.collect.LinkedHashMultimap.ValueSetLink
public void b(ValueSetLink<K, V> valueSetLink) {
this.f = valueSetLink;
}
}
private interface ValueSetLink<K, V> {
ValueSetLink<K, V> a();
void a(ValueSetLink<K, V> valueSetLink);
ValueSetLink<K, V> b();
void b(ValueSetLink<K, V> valueSetLink);
}
private LinkedHashMultimap(int i, int i2) {
super(new LinkedHashMap(i));
this.valueSetCapacity = 2;
CollectPreconditions.a(i2, "expectedValuesPerKey");
this.valueSetCapacity = i2;
this.multimapHeaderEntry = new ValueEntry<>(null, null, 0, null);
ValueEntry<K, V> valueEntry = this.multimapHeaderEntry;
succeedsInMultimap(valueEntry, valueEntry);
}
public static <K, V> LinkedHashMultimap<K, V> create() {
return new LinkedHashMultimap<>(16, 2);
}
/* JADX INFO: Access modifiers changed from: private */
public static <K, V> void deleteFromMultimap(ValueEntry<K, V> valueEntry) {
succeedsInMultimap(valueEntry.c(), valueEntry.d());
}
/* JADX INFO: Access modifiers changed from: private */
public static <K, V> void deleteFromValueSet(ValueSetLink<K, V> valueSetLink) {
succeedsInValueSet(valueSetLink.a(), valueSetLink.b());
}
/* JADX WARN: Multi-variable type inference failed */
private void readObject(ObjectInputStream objectInputStream) throws IOException, ClassNotFoundException {
objectInputStream.defaultReadObject();
this.multimapHeaderEntry = new ValueEntry<>(null, null, 0, null);
ValueEntry<K, V> valueEntry = this.multimapHeaderEntry;
succeedsInMultimap(valueEntry, valueEntry);
this.valueSetCapacity = 2;
int readInt = objectInputStream.readInt();
LinkedHashMap linkedHashMap = new LinkedHashMap();
for (int i = 0; i < readInt; i++) {
Object readObject = objectInputStream.readObject();
linkedHashMap.put(readObject, createCollection(readObject));
}
int readInt2 = objectInputStream.readInt();
for (int i2 = 0; i2 < readInt2; i2++) {
Object readObject2 = objectInputStream.readObject();
((Collection) linkedHashMap.get(readObject2)).add(objectInputStream.readObject());
}
setMap(linkedHashMap);
}
/* JADX INFO: Access modifiers changed from: private */
public static <K, V> void succeedsInMultimap(ValueEntry<K, V> valueEntry, ValueEntry<K, V> valueEntry2) {
valueEntry.b((ValueEntry) valueEntry2);
valueEntry2.a((ValueEntry) valueEntry);
}
/* JADX INFO: Access modifiers changed from: private */
public static <K, V> void succeedsInValueSet(ValueSetLink<K, V> valueSetLink, ValueSetLink<K, V> valueSetLink2) {
valueSetLink.a(valueSetLink2);
valueSetLink2.b(valueSetLink);
}
private void writeObject(ObjectOutputStream objectOutputStream) throws IOException {
objectOutputStream.defaultWriteObject();
objectOutputStream.writeInt(keySet().size());
Iterator<K> it = keySet().iterator();
while (it.hasNext()) {
objectOutputStream.writeObject(it.next());
}
objectOutputStream.writeInt(size());
for (Map.Entry<K, V> entry : entries()) {
objectOutputStream.writeObject(entry.getKey());
objectOutputStream.writeObject(entry.getValue());
}
}
@Override // com.google.common.collect.AbstractSetMultimap, com.google.common.collect.AbstractMultimap, com.google.common.collect.Multimap
public /* bridge */ /* synthetic */ Map asMap() {
return super.asMap();
}
@Override // com.google.common.collect.AbstractMapBasedMultimap, com.google.common.collect.Multimap
public void clear() {
super.clear();
ValueEntry<K, V> valueEntry = this.multimapHeaderEntry;
succeedsInMultimap(valueEntry, valueEntry);
}
@Override // com.google.common.collect.AbstractMultimap, com.google.common.collect.Multimap
public /* bridge */ /* synthetic */ boolean containsEntry(Object obj, Object obj2) {
return super.containsEntry(obj, obj2);
}
@Override // com.google.common.collect.AbstractMapBasedMultimap, com.google.common.collect.Multimap
public /* bridge */ /* synthetic */ boolean containsKey(Object obj) {
return super.containsKey(obj);
}
@Override // com.google.common.collect.AbstractMultimap
public /* bridge */ /* synthetic */ boolean containsValue(Object obj) {
return super.containsValue(obj);
}
@Override // com.google.common.collect.AbstractMapBasedMultimap, com.google.common.collect.AbstractMultimap
Iterator<Map.Entry<K, V>> entryIterator() {
return new Iterator<Map.Entry<K, V>>() { // from class: com.google.common.collect.LinkedHashMultimap.1
ValueEntry<K, V> a;
ValueEntry<K, V> b;
{
this.a = LinkedHashMultimap.this.multimapHeaderEntry.h;
}
@Override // java.util.Iterator
public boolean hasNext() {
return this.a != LinkedHashMultimap.this.multimapHeaderEntry;
}
@Override // java.util.Iterator
public void remove() {
CollectPreconditions.a(this.b != null);
LinkedHashMultimap.this.remove(this.b.getKey(), this.b.getValue());
this.b = null;
}
@Override // java.util.Iterator
public Map.Entry<K, V> next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
ValueEntry<K, V> valueEntry = this.a;
this.b = valueEntry;
this.a = valueEntry.h;
return valueEntry;
}
};
}
@Override // com.google.common.collect.AbstractSetMultimap, com.google.common.collect.AbstractMultimap
public /* bridge */ /* synthetic */ boolean equals(Object obj) {
return super.equals(obj);
}
/* JADX WARN: Multi-variable type inference failed */
@Override // com.google.common.collect.AbstractSetMultimap, com.google.common.collect.AbstractMapBasedMultimap, com.google.common.collect.Multimap
public /* bridge */ /* synthetic */ Set get(Object obj) {
return super.get((LinkedHashMultimap<K, V>) obj);
}
@Override // com.google.common.collect.AbstractMultimap
public /* bridge */ /* synthetic */ int hashCode() {
return super.hashCode();
}
@Override // com.google.common.collect.AbstractMultimap, com.google.common.collect.Multimap
public /* bridge */ /* synthetic */ boolean isEmpty() {
return super.isEmpty();
}
@Override // com.google.common.collect.AbstractMultimap, com.google.common.collect.Multimap
public Set<K> keySet() {
return super.keySet();
}
@Override // com.google.common.collect.AbstractMultimap
public /* bridge */ /* synthetic */ Multiset keys() {
return super.keys();
}
/* JADX WARN: Multi-variable type inference failed */
@Override // com.google.common.collect.AbstractSetMultimap, com.google.common.collect.AbstractMapBasedMultimap, com.google.common.collect.AbstractMultimap, com.google.common.collect.Multimap
public /* bridge */ /* synthetic */ boolean put(Object obj, Object obj2) {
return super.put(obj, obj2);
}
@Override // com.google.common.collect.AbstractMultimap
public /* bridge */ /* synthetic */ boolean putAll(Multimap multimap) {
return super.putAll(multimap);
}
@Override // com.google.common.collect.AbstractMultimap, com.google.common.collect.Multimap
public /* bridge */ /* synthetic */ boolean remove(Object obj, Object obj2) {
return super.remove(obj, obj2);
}
@Override // com.google.common.collect.AbstractSetMultimap, com.google.common.collect.AbstractMapBasedMultimap, com.google.common.collect.Multimap
public /* bridge */ /* synthetic */ Set removeAll(Object obj) {
return super.removeAll(obj);
}
/* JADX WARN: Multi-variable type inference failed */
@Override // com.google.common.collect.AbstractSetMultimap, com.google.common.collect.AbstractMapBasedMultimap, com.google.common.collect.AbstractMultimap
public /* bridge */ /* synthetic */ Collection replaceValues(Object obj, Iterable iterable) {
return replaceValues((LinkedHashMultimap<K, V>) obj, iterable);
}
@Override // com.google.common.collect.AbstractMapBasedMultimap, com.google.common.collect.Multimap
public /* bridge */ /* synthetic */ int size() {
return super.size();
}
@Override // com.google.common.collect.AbstractMultimap
public /* bridge */ /* synthetic */ String toString() {
return super.toString();
}
@Override // com.google.common.collect.AbstractMapBasedMultimap, com.google.common.collect.AbstractMultimap
Iterator<V> valueIterator() {
return Maps.b(entryIterator());
}
@Override // com.google.common.collect.AbstractMapBasedMultimap, com.google.common.collect.AbstractMultimap
public Collection<V> values() {
return super.values();
}
public static <K, V> LinkedHashMultimap<K, V> create(int i, int i2) {
return new LinkedHashMultimap<>(Maps.a(i), Maps.a(i2));
}
/* JADX INFO: Access modifiers changed from: package-private */
@Override // com.google.common.collect.AbstractSetMultimap, com.google.common.collect.AbstractMapBasedMultimap
public Set<V> createCollection() {
return new LinkedHashSet(this.valueSetCapacity);
}
@Override // com.google.common.collect.AbstractSetMultimap, com.google.common.collect.AbstractMapBasedMultimap, com.google.common.collect.AbstractMultimap, com.google.common.collect.Multimap
public Set<Map.Entry<K, V>> entries() {
return super.entries();
}
/* JADX WARN: Multi-variable type inference failed */
@Override // com.google.common.collect.AbstractMultimap, com.google.common.collect.Multimap
public /* bridge */ /* synthetic */ boolean putAll(Object obj, Iterable iterable) {
return super.putAll(obj, iterable);
}
@Override // com.google.common.collect.AbstractSetMultimap, com.google.common.collect.AbstractMapBasedMultimap, com.google.common.collect.AbstractMultimap
public Set<V> replaceValues(K k, Iterable<? extends V> iterable) {
return super.replaceValues((LinkedHashMultimap<K, V>) k, (Iterable) iterable);
}
@Override // com.google.common.collect.AbstractMapBasedMultimap
Collection<V> createCollection(K k) {
return new ValueSet(k, this.valueSetCapacity);
}
public static <K, V> LinkedHashMultimap<K, V> create(Multimap<? extends K, ? extends V> multimap) {
LinkedHashMultimap<K, V> create = create(multimap.keySet().size(), 2);
create.putAll(multimap);
return create;
}
}