ADD week 5
This commit is contained in:
		
							
								
								
									
										554
									
								
								02-Easy5/E5/sources/androidx/collection/MapCollections.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										554
									
								
								02-Easy5/E5/sources/androidx/collection/MapCollections.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,554 @@ | ||||
| package androidx.collection; | ||||
|  | ||||
| import java.lang.reflect.Array; | ||||
| import java.util.Collection; | ||||
| import java.util.Iterator; | ||||
| import java.util.Map; | ||||
| import java.util.NoSuchElementException; | ||||
| import java.util.Set; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| abstract class MapCollections<K, V> { | ||||
|     MapCollections<K, V>.EntrySet mEntrySet; | ||||
|     MapCollections<K, V>.KeySet mKeySet; | ||||
|     MapCollections<K, V>.ValuesCollection mValues; | ||||
|  | ||||
|     protected abstract void colClear(); | ||||
|  | ||||
|     protected abstract Object colGetEntry(int i, int i2); | ||||
|  | ||||
|     protected abstract Map<K, V> colGetMap(); | ||||
|  | ||||
|     protected abstract int colGetSize(); | ||||
|  | ||||
|     protected abstract int colIndexOfKey(Object obj); | ||||
|  | ||||
|     protected abstract int colIndexOfValue(Object obj); | ||||
|  | ||||
|     protected abstract void colPut(K k, V v); | ||||
|  | ||||
|     protected abstract void colRemoveAt(int i); | ||||
|  | ||||
|     protected abstract V colSetValue(int i, V v); | ||||
|  | ||||
|     MapCollections() { | ||||
|     } | ||||
|  | ||||
|     final class ArrayIterator<T> implements Iterator<T> { | ||||
|         boolean mCanRemove = false; | ||||
|         int mIndex; | ||||
|         final int mOffset; | ||||
|         int mSize; | ||||
|  | ||||
|         @Override // java.util.Iterator | ||||
|         public boolean hasNext() { | ||||
|             return this.mIndex < this.mSize; | ||||
|         } | ||||
|  | ||||
|         ArrayIterator(int i) { | ||||
|             this.mOffset = i; | ||||
|             this.mSize = MapCollections.this.colGetSize(); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Iterator | ||||
|         public T next() { | ||||
|             if (!hasNext()) { | ||||
|                 throw new NoSuchElementException(); | ||||
|             } | ||||
|             T t = (T) MapCollections.this.colGetEntry(this.mIndex, this.mOffset); | ||||
|             this.mIndex++; | ||||
|             this.mCanRemove = true; | ||||
|             return t; | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Iterator | ||||
|         public void remove() { | ||||
|             if (!this.mCanRemove) { | ||||
|                 throw new IllegalStateException(); | ||||
|             } | ||||
|             int i = this.mIndex - 1; | ||||
|             this.mIndex = i; | ||||
|             this.mSize--; | ||||
|             this.mCanRemove = false; | ||||
|             MapCollections.this.colRemoveAt(i); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     final class MapIterator implements Iterator<Map.Entry<K, V>>, Map.Entry<K, V> { | ||||
|         int mEnd; | ||||
|         boolean mEntryValid = false; | ||||
|         int mIndex = -1; | ||||
|  | ||||
|         @Override // java.util.Iterator | ||||
|         public boolean hasNext() { | ||||
|             return this.mIndex < this.mEnd; | ||||
|         } | ||||
|  | ||||
|         MapIterator() { | ||||
|             this.mEnd = MapCollections.this.colGetSize() - 1; | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Iterator | ||||
|         public Map.Entry<K, V> next() { | ||||
|             if (!hasNext()) { | ||||
|                 throw new NoSuchElementException(); | ||||
|             } | ||||
|             this.mIndex++; | ||||
|             this.mEntryValid = true; | ||||
|             return this; | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Iterator | ||||
|         public void remove() { | ||||
|             if (!this.mEntryValid) { | ||||
|                 throw new IllegalStateException(); | ||||
|             } | ||||
|             MapCollections.this.colRemoveAt(this.mIndex); | ||||
|             this.mIndex--; | ||||
|             this.mEnd--; | ||||
|             this.mEntryValid = false; | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Map.Entry | ||||
|         public K getKey() { | ||||
|             if (!this.mEntryValid) { | ||||
|                 throw new IllegalStateException("This container does not support retaining Map.Entry objects"); | ||||
|             } | ||||
|             return (K) MapCollections.this.colGetEntry(this.mIndex, 0); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Map.Entry | ||||
|         public V getValue() { | ||||
|             if (!this.mEntryValid) { | ||||
|                 throw new IllegalStateException("This container does not support retaining Map.Entry objects"); | ||||
|             } | ||||
|             return (V) MapCollections.this.colGetEntry(this.mIndex, 1); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Map.Entry | ||||
|         public V setValue(V v) { | ||||
|             if (!this.mEntryValid) { | ||||
|                 throw new IllegalStateException("This container does not support retaining Map.Entry objects"); | ||||
|             } | ||||
|             return (V) MapCollections.this.colSetValue(this.mIndex, v); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Map.Entry | ||||
|         public boolean equals(Object obj) { | ||||
|             if (!this.mEntryValid) { | ||||
|                 throw new IllegalStateException("This container does not support retaining Map.Entry objects"); | ||||
|             } | ||||
|             if (!(obj instanceof Map.Entry)) { | ||||
|                 return false; | ||||
|             } | ||||
|             Map.Entry entry = (Map.Entry) obj; | ||||
|             return ContainerHelpers.equal(entry.getKey(), MapCollections.this.colGetEntry(this.mIndex, 0)) && ContainerHelpers.equal(entry.getValue(), MapCollections.this.colGetEntry(this.mIndex, 1)); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Map.Entry | ||||
|         public int hashCode() { | ||||
|             if (!this.mEntryValid) { | ||||
|                 throw new IllegalStateException("This container does not support retaining Map.Entry objects"); | ||||
|             } | ||||
|             Object colGetEntry = MapCollections.this.colGetEntry(this.mIndex, 0); | ||||
|             Object colGetEntry2 = MapCollections.this.colGetEntry(this.mIndex, 1); | ||||
|             return (colGetEntry == null ? 0 : colGetEntry.hashCode()) ^ (colGetEntry2 != null ? colGetEntry2.hashCode() : 0); | ||||
|         } | ||||
|  | ||||
|         public String toString() { | ||||
|             return getKey() + "=" + getValue(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     final class EntrySet implements Set<Map.Entry<K, V>> { | ||||
|         EntrySet() { | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public boolean add(Map.Entry<K, V> entry) { | ||||
|             throw new UnsupportedOperationException(); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public boolean addAll(Collection<? extends Map.Entry<K, V>> collection) { | ||||
|             int colGetSize = MapCollections.this.colGetSize(); | ||||
|             for (Map.Entry<K, V> entry : collection) { | ||||
|                 MapCollections.this.colPut(entry.getKey(), entry.getValue()); | ||||
|             } | ||||
|             return colGetSize != MapCollections.this.colGetSize(); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public void clear() { | ||||
|             MapCollections.this.colClear(); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public boolean contains(Object obj) { | ||||
|             if (!(obj instanceof Map.Entry)) { | ||||
|                 return false; | ||||
|             } | ||||
|             Map.Entry entry = (Map.Entry) obj; | ||||
|             int colIndexOfKey = MapCollections.this.colIndexOfKey(entry.getKey()); | ||||
|             if (colIndexOfKey < 0) { | ||||
|                 return false; | ||||
|             } | ||||
|             return ContainerHelpers.equal(MapCollections.this.colGetEntry(colIndexOfKey, 1), entry.getValue()); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public boolean containsAll(Collection<?> collection) { | ||||
|             Iterator<?> it = collection.iterator(); | ||||
|             while (it.hasNext()) { | ||||
|                 if (!contains(it.next())) { | ||||
|                     return false; | ||||
|                 } | ||||
|             } | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public boolean isEmpty() { | ||||
|             return MapCollections.this.colGetSize() == 0; | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection, java.lang.Iterable | ||||
|         public Iterator<Map.Entry<K, V>> iterator() { | ||||
|             return new MapIterator(); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public boolean remove(Object obj) { | ||||
|             throw new UnsupportedOperationException(); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public boolean removeAll(Collection<?> collection) { | ||||
|             throw new UnsupportedOperationException(); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public boolean retainAll(Collection<?> collection) { | ||||
|             throw new UnsupportedOperationException(); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public int size() { | ||||
|             return MapCollections.this.colGetSize(); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public Object[] toArray() { | ||||
|             throw new UnsupportedOperationException(); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public <T> T[] toArray(T[] tArr) { | ||||
|             throw new UnsupportedOperationException(); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public boolean equals(Object obj) { | ||||
|             return MapCollections.equalsSetHelper(this, obj); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public int hashCode() { | ||||
|             int i = 0; | ||||
|             for (int colGetSize = MapCollections.this.colGetSize() - 1; colGetSize >= 0; colGetSize--) { | ||||
|                 Object colGetEntry = MapCollections.this.colGetEntry(colGetSize, 0); | ||||
|                 Object colGetEntry2 = MapCollections.this.colGetEntry(colGetSize, 1); | ||||
|                 i += (colGetEntry == null ? 0 : colGetEntry.hashCode()) ^ (colGetEntry2 == null ? 0 : colGetEntry2.hashCode()); | ||||
|             } | ||||
|             return i; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     final class KeySet implements Set<K> { | ||||
|         KeySet() { | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public boolean add(K k) { | ||||
|             throw new UnsupportedOperationException(); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public boolean addAll(Collection<? extends K> collection) { | ||||
|             throw new UnsupportedOperationException(); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public void clear() { | ||||
|             MapCollections.this.colClear(); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public boolean contains(Object obj) { | ||||
|             return MapCollections.this.colIndexOfKey(obj) >= 0; | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public boolean containsAll(Collection<?> collection) { | ||||
|             return MapCollections.containsAllHelper(MapCollections.this.colGetMap(), collection); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public boolean isEmpty() { | ||||
|             return MapCollections.this.colGetSize() == 0; | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection, java.lang.Iterable | ||||
|         public Iterator<K> iterator() { | ||||
|             return new ArrayIterator(0); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public boolean remove(Object obj) { | ||||
|             int colIndexOfKey = MapCollections.this.colIndexOfKey(obj); | ||||
|             if (colIndexOfKey < 0) { | ||||
|                 return false; | ||||
|             } | ||||
|             MapCollections.this.colRemoveAt(colIndexOfKey); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public boolean removeAll(Collection<?> collection) { | ||||
|             return MapCollections.removeAllHelper(MapCollections.this.colGetMap(), collection); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public boolean retainAll(Collection<?> collection) { | ||||
|             return MapCollections.retainAllHelper(MapCollections.this.colGetMap(), collection); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public int size() { | ||||
|             return MapCollections.this.colGetSize(); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public Object[] toArray() { | ||||
|             return MapCollections.this.toArrayHelper(0); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public <T> T[] toArray(T[] tArr) { | ||||
|             return (T[]) MapCollections.this.toArrayHelper(tArr, 0); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public boolean equals(Object obj) { | ||||
|             return MapCollections.equalsSetHelper(this, obj); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Set, java.util.Collection | ||||
|         public int hashCode() { | ||||
|             int i = 0; | ||||
|             for (int colGetSize = MapCollections.this.colGetSize() - 1; colGetSize >= 0; colGetSize--) { | ||||
|                 Object colGetEntry = MapCollections.this.colGetEntry(colGetSize, 0); | ||||
|                 i += colGetEntry == null ? 0 : colGetEntry.hashCode(); | ||||
|             } | ||||
|             return i; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     final class ValuesCollection implements Collection<V> { | ||||
|         ValuesCollection() { | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Collection | ||||
|         public boolean add(V v) { | ||||
|             throw new UnsupportedOperationException(); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Collection | ||||
|         public boolean addAll(Collection<? extends V> collection) { | ||||
|             throw new UnsupportedOperationException(); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Collection | ||||
|         public void clear() { | ||||
|             MapCollections.this.colClear(); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Collection | ||||
|         public boolean contains(Object obj) { | ||||
|             return MapCollections.this.colIndexOfValue(obj) >= 0; | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Collection | ||||
|         public boolean containsAll(Collection<?> collection) { | ||||
|             Iterator<?> it = collection.iterator(); | ||||
|             while (it.hasNext()) { | ||||
|                 if (!contains(it.next())) { | ||||
|                     return false; | ||||
|                 } | ||||
|             } | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Collection | ||||
|         public boolean isEmpty() { | ||||
|             return MapCollections.this.colGetSize() == 0; | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Collection, java.lang.Iterable | ||||
|         public Iterator<V> iterator() { | ||||
|             return new ArrayIterator(1); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Collection | ||||
|         public boolean remove(Object obj) { | ||||
|             int colIndexOfValue = MapCollections.this.colIndexOfValue(obj); | ||||
|             if (colIndexOfValue < 0) { | ||||
|                 return false; | ||||
|             } | ||||
|             MapCollections.this.colRemoveAt(colIndexOfValue); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Collection | ||||
|         public boolean removeAll(Collection<?> collection) { | ||||
|             int colGetSize = MapCollections.this.colGetSize(); | ||||
|             int i = 0; | ||||
|             boolean z = false; | ||||
|             while (i < colGetSize) { | ||||
|                 if (collection.contains(MapCollections.this.colGetEntry(i, 1))) { | ||||
|                     MapCollections.this.colRemoveAt(i); | ||||
|                     i--; | ||||
|                     colGetSize--; | ||||
|                     z = true; | ||||
|                 } | ||||
|                 i++; | ||||
|             } | ||||
|             return z; | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Collection | ||||
|         public boolean retainAll(Collection<?> collection) { | ||||
|             int colGetSize = MapCollections.this.colGetSize(); | ||||
|             int i = 0; | ||||
|             boolean z = false; | ||||
|             while (i < colGetSize) { | ||||
|                 if (!collection.contains(MapCollections.this.colGetEntry(i, 1))) { | ||||
|                     MapCollections.this.colRemoveAt(i); | ||||
|                     i--; | ||||
|                     colGetSize--; | ||||
|                     z = true; | ||||
|                 } | ||||
|                 i++; | ||||
|             } | ||||
|             return z; | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Collection | ||||
|         public int size() { | ||||
|             return MapCollections.this.colGetSize(); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Collection | ||||
|         public Object[] toArray() { | ||||
|             return MapCollections.this.toArrayHelper(1); | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Collection | ||||
|         public <T> T[] toArray(T[] tArr) { | ||||
|             return (T[]) MapCollections.this.toArrayHelper(tArr, 1); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static <K, V> boolean containsAllHelper(Map<K, V> map, Collection<?> collection) { | ||||
|         Iterator<?> it = collection.iterator(); | ||||
|         while (it.hasNext()) { | ||||
|             if (!map.containsKey(it.next())) { | ||||
|                 return false; | ||||
|             } | ||||
|         } | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     public static <K, V> boolean removeAllHelper(Map<K, V> map, Collection<?> collection) { | ||||
|         int size = map.size(); | ||||
|         Iterator<?> it = collection.iterator(); | ||||
|         while (it.hasNext()) { | ||||
|             map.remove(it.next()); | ||||
|         } | ||||
|         return size != map.size(); | ||||
|     } | ||||
|  | ||||
|     public static <K, V> boolean retainAllHelper(Map<K, V> map, Collection<?> collection) { | ||||
|         int size = map.size(); | ||||
|         Iterator<K> it = map.keySet().iterator(); | ||||
|         while (it.hasNext()) { | ||||
|             if (!collection.contains(it.next())) { | ||||
|                 it.remove(); | ||||
|             } | ||||
|         } | ||||
|         return size != map.size(); | ||||
|     } | ||||
|  | ||||
|     public Object[] toArrayHelper(int i) { | ||||
|         int colGetSize = colGetSize(); | ||||
|         Object[] objArr = new Object[colGetSize]; | ||||
|         for (int i2 = 0; i2 < colGetSize; i2++) { | ||||
|             objArr[i2] = colGetEntry(i2, i); | ||||
|         } | ||||
|         return objArr; | ||||
|     } | ||||
|  | ||||
|     public <T> T[] toArrayHelper(T[] tArr, int i) { | ||||
|         int colGetSize = colGetSize(); | ||||
|         if (tArr.length < colGetSize) { | ||||
|             tArr = (T[]) ((Object[]) Array.newInstance(tArr.getClass().getComponentType(), colGetSize)); | ||||
|         } | ||||
|         for (int i2 = 0; i2 < colGetSize; i2++) { | ||||
|             tArr[i2] = colGetEntry(i2, i); | ||||
|         } | ||||
|         if (tArr.length > colGetSize) { | ||||
|             tArr[colGetSize] = null; | ||||
|         } | ||||
|         return tArr; | ||||
|     } | ||||
|  | ||||
|     public static <T> boolean equalsSetHelper(Set<T> set, Object obj) { | ||||
|         if (set == obj) { | ||||
|             return true; | ||||
|         } | ||||
|         if (obj instanceof Set) { | ||||
|             Set set2 = (Set) obj; | ||||
|             try { | ||||
|                 if (set.size() == set2.size()) { | ||||
|                     if (set.containsAll(set2)) { | ||||
|                         return true; | ||||
|                     } | ||||
|                 } | ||||
|                 return false; | ||||
|             } catch (ClassCastException | NullPointerException unused) { | ||||
|             } | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     public Set<Map.Entry<K, V>> getEntrySet() { | ||||
|         if (this.mEntrySet == null) { | ||||
|             this.mEntrySet = new EntrySet(); | ||||
|         } | ||||
|         return this.mEntrySet; | ||||
|     } | ||||
|  | ||||
|     public Set<K> getKeySet() { | ||||
|         if (this.mKeySet == null) { | ||||
|             this.mKeySet = new KeySet(); | ||||
|         } | ||||
|         return this.mKeySet; | ||||
|     } | ||||
|  | ||||
|     public Collection<V> getValues() { | ||||
|         if (this.mValues == null) { | ||||
|             this.mValues = new ValuesCollection(); | ||||
|         } | ||||
|         return this.mValues; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user