what-the-bank/sources/com/google/common/collect/ImmutableSet.java

365 lines
13 KiB
Java
Raw Permalink Normal View History

2024-07-27 18:17:47 +07:00
package com.google.common.collect;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableCollection;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.Set;
import java.util.SortedSet;
/* loaded from: classes2.dex */
public abstract class ImmutableSet<E> extends ImmutableCollection<E> implements Set<E> {
private static final int CUTOFF = 751619276;
private static final double DESIRED_LOAD_FACTOR = 0.7d;
static final int MAX_TABLE_SIZE = 1073741824;
private transient ImmutableList<E> asList;
/* JADX INFO: Access modifiers changed from: private */
public static boolean shouldTrim(int i, int i2) {
return i < (i2 >> 1) + (i2 >> 2);
}
boolean isHashCodeFast() {
return false;
}
@Override // com.google.common.collect.ImmutableCollection, java.util.AbstractCollection, java.util.Collection, java.lang.Iterable, java.util.Set, java.util.NavigableSet, com.google.common.collect.SortedIterable
public abstract UnmodifiableIterator<E> iterator();
@Override // com.google.common.collect.ImmutableCollection, java.util.AbstractCollection, java.util.Collection, java.lang.Iterable, java.util.Set, java.util.NavigableSet, com.google.common.collect.SortedIterable
public /* bridge */ /* synthetic */ Iterator iterator() {
return iterator();
}
public static <E> ImmutableSet<E> of() {
return RegularImmutableSet.EMPTY;
}
public static <E> ImmutableSet<E> of(E e) {
return new SingletonImmutableSet(e);
}
public static <E> ImmutableSet<E> of(E e, E e2) {
return construct(2, e, e2);
}
public static <E> ImmutableSet<E> of(E e, E e2, E e3) {
return construct(3, e, e2, e3);
}
public static <E> ImmutableSet<E> of(E e, E e2, E e3, E e4) {
return construct(4, e, e2, e3, e4);
}
public static <E> ImmutableSet<E> of(E e, E e2, E e3, E e4, E e5) {
return construct(5, e, e2, e3, e4, e5);
}
@SafeVarargs
public static <E> ImmutableSet<E> of(E e, E e2, E e3, E e4, E e5, E e6, E... eArr) {
Preconditions.checkArgument(eArr.length <= 2147483641, "the total number of elements must fit in an int");
int length = eArr.length + 6;
Object[] objArr = new Object[length];
objArr[0] = e;
objArr[1] = e2;
objArr[2] = e3;
objArr[3] = e4;
objArr[4] = e5;
objArr[5] = e6;
System.arraycopy(eArr, 0, objArr, 6, eArr.length);
return construct(length, objArr);
}
/* JADX INFO: Access modifiers changed from: private */
public static <E> ImmutableSet<E> construct(int i, Object... objArr) {
while (i != 0) {
if (i == 1) {
return of(objArr[0]);
}
int chooseTableSize = chooseTableSize(i);
Object[] objArr2 = new Object[chooseTableSize];
int i2 = chooseTableSize - 1;
int i3 = 0;
int i4 = 0;
for (int i5 = 0; i5 < i; i5++) {
Object checkElementNotNull = ObjectArrays.checkElementNotNull(objArr[i5], i5);
int hashCode = checkElementNotNull.hashCode();
int smear = Hashing.smear(hashCode);
while (true) {
int i6 = smear & i2;
Object obj = objArr2[i6];
if (obj == null) {
objArr[i4] = checkElementNotNull;
objArr2[i6] = checkElementNotNull;
i3 += hashCode;
i4++;
break;
}
if (obj.equals(checkElementNotNull)) {
break;
}
smear++;
}
}
Arrays.fill(objArr, i4, i, (Object) null);
if (i4 == 1) {
return new SingletonImmutableSet(objArr[0], i3);
}
if (chooseTableSize(i4) >= chooseTableSize / 2) {
if (shouldTrim(i4, objArr.length)) {
objArr = Arrays.copyOf(objArr, i4);
}
return new RegularImmutableSet(objArr, i3, objArr2, i2, i4);
}
i = i4;
}
return of();
}
/* JADX INFO: Access modifiers changed from: package-private */
public static int chooseTableSize(int i) {
int max = Math.max(i, 2);
if (max < CUTOFF) {
int highestOneBit = Integer.highestOneBit(max - 1) << 1;
while (highestOneBit * DESIRED_LOAD_FACTOR < max) {
highestOneBit <<= 1;
}
return highestOneBit;
}
Preconditions.checkArgument(max < 1073741824, "collection too large");
return 1073741824;
}
public static <E> ImmutableSet<E> copyOf(Collection<? extends E> collection) {
if ((collection instanceof ImmutableSet) && !(collection instanceof SortedSet)) {
ImmutableSet<E> immutableSet = (ImmutableSet) collection;
if (!immutableSet.isPartialView()) {
return immutableSet;
}
}
Object[] array = collection.toArray();
return construct(array.length, array);
}
public static <E> ImmutableSet<E> copyOf(Iterable<? extends E> iterable) {
if (iterable instanceof Collection) {
return copyOf((Collection) iterable);
}
return copyOf(iterable.iterator());
}
public static <E> ImmutableSet<E> copyOf(Iterator<? extends E> it) {
if (!it.hasNext()) {
return of();
}
E next = it.next();
if (!it.hasNext()) {
return of((Object) next);
}
return new Builder().add((Builder) next).addAll((Iterator) it).build();
}
public static <E> ImmutableSet<E> copyOf(E[] eArr) {
int length = eArr.length;
if (length == 0) {
return of();
}
if (length == 1) {
return of((Object) eArr[0]);
}
return construct(eArr.length, (Object[]) eArr.clone());
}
@Override // java.util.Collection, java.util.Set
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if ((obj instanceof ImmutableSet) && isHashCodeFast() && ((ImmutableSet) obj).isHashCodeFast() && hashCode() != obj.hashCode()) {
return false;
}
return Sets.equalsImpl(this, obj);
}
@Override // java.util.Collection, java.util.Set
public int hashCode() {
return Sets.hashCodeImpl(this);
}
@Override // com.google.common.collect.ImmutableCollection
public ImmutableList<E> asList() {
ImmutableList<E> immutableList = this.asList;
if (immutableList != null) {
return immutableList;
}
ImmutableList<E> createAsList = createAsList();
this.asList = createAsList;
return createAsList;
}
/* JADX INFO: Access modifiers changed from: package-private */
public ImmutableList<E> createAsList() {
return ImmutableList.asImmutableList(toArray());
}
/* loaded from: classes2.dex */
static class SerializedForm implements Serializable {
private static final long serialVersionUID = 0;
final Object[] elements;
SerializedForm(Object[] objArr) {
this.elements = objArr;
}
Object readResolve() {
return ImmutableSet.copyOf(this.elements);
}
}
@Override // com.google.common.collect.ImmutableCollection
Object writeReplace() {
return new SerializedForm(toArray());
}
public static <E> Builder<E> builder() {
return new Builder<>();
}
public static <E> Builder<E> builderWithExpectedSize(int i) {
CollectPreconditions.checkNonnegative(i, "expectedSize");
return new Builder<>(i);
}
/* loaded from: classes2.dex */
public static class Builder<E> extends ImmutableCollection.ArrayBasedBuilder<E> {
private int hashCode;
Object[] hashTable;
/* JADX WARN: Multi-variable type inference failed */
@Override // com.google.common.collect.ImmutableCollection.ArrayBasedBuilder, com.google.common.collect.ImmutableCollection.Builder
public /* bridge */ /* synthetic */ ImmutableCollection.ArrayBasedBuilder add(Object obj) {
return add((Builder<E>) obj);
}
/* JADX WARN: Multi-variable type inference failed */
@Override // com.google.common.collect.ImmutableCollection.ArrayBasedBuilder, com.google.common.collect.ImmutableCollection.Builder
public /* bridge */ /* synthetic */ ImmutableCollection.Builder add(Object obj) {
return add((Builder<E>) obj);
}
public Builder() {
super(4);
}
Builder(int i) {
super(i);
this.hashTable = new Object[ImmutableSet.chooseTableSize(i)];
}
@Override // com.google.common.collect.ImmutableCollection.ArrayBasedBuilder, com.google.common.collect.ImmutableCollection.Builder
public Builder<E> add(E e) {
Preconditions.checkNotNull(e);
if (this.hashTable != null && ImmutableSet.chooseTableSize(this.size) <= this.hashTable.length) {
addDeduping(e);
return this;
}
this.hashTable = null;
super.add((Builder<E>) e);
return this;
}
@Override // com.google.common.collect.ImmutableCollection.ArrayBasedBuilder, com.google.common.collect.ImmutableCollection.Builder
public Builder<E> add(E... eArr) {
if (this.hashTable != null) {
for (E e : eArr) {
add((Builder<E>) e);
}
} else {
super.add((Object[]) eArr);
}
return this;
}
private void addDeduping(E e) {
int length = this.hashTable.length;
int hashCode = e.hashCode();
int smear = Hashing.smear(hashCode);
while (true) {
int i = smear & (length - 1);
Object[] objArr = this.hashTable;
Object obj = objArr[i];
if (obj == null) {
objArr[i] = e;
this.hashCode += hashCode;
super.add((Builder<E>) e);
return;
} else if (obj.equals(e)) {
return;
} else {
smear = i + 1;
}
}
}
@Override // com.google.common.collect.ImmutableCollection.ArrayBasedBuilder, com.google.common.collect.ImmutableCollection.Builder
public Builder<E> addAll(Iterable<? extends E> iterable) {
Preconditions.checkNotNull(iterable);
if (this.hashTable != null) {
Iterator<? extends E> it = iterable.iterator();
while (it.hasNext()) {
add((Builder<E>) it.next());
}
} else {
super.addAll((Iterable) iterable);
}
return this;
}
@Override // com.google.common.collect.ImmutableCollection.Builder
public Builder<E> addAll(Iterator<? extends E> it) {
Preconditions.checkNotNull(it);
while (it.hasNext()) {
add((Builder<E>) it.next());
}
return this;
}
/* JADX INFO: Access modifiers changed from: package-private */
/* JADX WARN: Multi-variable type inference failed */
public Builder<E> combine(Builder<E> builder) {
if (this.hashTable != null) {
for (int i = 0; i < builder.size; i++) {
add((Builder<E>) builder.contents[i]);
}
} else {
addAll(builder.contents, builder.size);
}
return this;
}
@Override // com.google.common.collect.ImmutableCollection.Builder
public ImmutableSet<E> build() {
ImmutableSet<E> construct;
int i = this.size;
if (i == 0) {
return ImmutableSet.of();
}
if (i == 1) {
return ImmutableSet.of(this.contents[0]);
}
if (this.hashTable == null || ImmutableSet.chooseTableSize(this.size) != this.hashTable.length) {
construct = ImmutableSet.construct(this.size, this.contents);
this.size = construct.size();
} else {
Object[] copyOf = ImmutableSet.shouldTrim(this.size, this.contents.length) ? Arrays.copyOf(this.contents, this.size) : this.contents;
construct = new RegularImmutableSet<>(copyOf, this.hashCode, this.hashTable, r5.length - 1, this.size);
}
this.forceCopy = true;
this.hashTable = null;
return construct;
}
}
}