Most visited

Recently visited

Added in API level 16

LongSparseArray

public class LongSparseArray
extends Object implements Cloneable

java.lang.Object
   ↳ android.util.LongSparseArray<E>


SparseArray映射持续到对象。 与普通的对象数组不同,索引中可能存在空白。 它的目的是比使用HashMap将Longs映射到Objects更高的内存效率,因为它避免了自动装箱键,并且其数据结构不依赖每个映射的额外入口对象。

请注意,此容器将其映射保存在数组数据结构中,并使用二进制搜索来查找键。 该实现不适用于可能包含大量项目的数据结构。 它通常比传统的HashMap慢,因为查找需要二分搜索并添加和删除需要插入和删除数组中的条目。 对于容纳数百种物品的容器,性能差异不显着,小于50%。

为了提高性能,容器在删除键时包含一个优化:不是立即压缩其数组,而是将删除的条目标记为已删除。 然后可以将该条目重新用于相同的密钥,或稍后在所有移除的条目的单个垃圾收集步骤中进行压缩。 这个垃圾收集需要随时生成数组或者检索地图大小或条目值。

可以使用keyAt(int)valueAt(int)遍历此容器中的项目。 使用keyAt(int)对索引进行迭代,索引的升序值将按照升序返回键,或者在valueAt(int)的情况下按升序键对应的值。

Summary

Public constructors

LongSparseArray()

创建一个不包含映射的新LongSparseArray。

LongSparseArray(int initialCapacity)

创建一个不包含映射的新LongSparseArray,这些映射不需要任何额外的内存分配来存储指定数量的映射。

Public methods

void append(long key, E value)

将键/值对放入数组中,针对键大于数组中所有现有键的情况进行优化。

void clear()

从此LongSparseArray中删除所有键值映射。

LongSparseArray<E> clone()

创建并返回此对象的副本。

void delete(long key)

如果有指定的键,则删除指定键的映射。

E get(long key)

获取从指定键映射的对象,或者如果没有这样的映射,则 null

E get(long key, E valueIfKeyNotFound)

获取从指定键映射的Object或指定的Object,如果没有这样的映射。

int indexOfKey(long key)

返回 keyAt(int)将返回指定键的索引,如果指定的键未映射,则返回负数。

int indexOfValue(E value)

返回 valueAt(int)将返回指定键的索引;如果没有键映射到指定值,则返回负数。

long keyAt(int index)

给定范围 0...size()-1的索引,返回此LongSparseArray存储的第 index个键值映射中的键。

void put(long key, E value)

添加从指定键到指定值的映射,如果有指定键,则从指定键替换以前的映射。

void remove(long key)

别名为 delete(long)

void removeAt(int index)

删除指定索引处的映射。

void setValueAt(int index, E value)

给定一个范围为 0...size()-1的索引,为此LongSparseArray存储的第 index个键值映射设置一个新值。

int size()

返回此LongSparseArray当前存储的键值映射的数量。

String toString()

返回对象的字符串表示形式。

该实现通过遍历其映射来组成一个字符串。

E valueAt(int index)

给定一个范围为 0...size()-1的索引,返回此LongSparseArray存储的第 index个键值映射的值。

Inherited methods

From class java.lang.Object

Public constructors

LongSparseArray

Added in API level 16
LongSparseArray ()

创建一个不包含映射的新LongSparseArray。

LongSparseArray

Added in API level 16
LongSparseArray (int initialCapacity)

创建一个不包含映射的新LongSparseArray,这些映射不需要任何额外的内存分配来存储指定数量的映射。 如果您提供的初始容量为0,则稀疏数组将使用轻量级表示进行初始化,而不需要任何额外的数组分配。

Parameters
initialCapacity int

Public methods

append

Added in API level 16
void append (long key, 
                E value)

将键/值对放入数组中,针对键大于数组中所有现有键的情况进行优化。

Parameters
key long
value E

clear

Added in API level 16
void clear ()

从此LongSparseArray中删除所有键值映射。

clone

Added in API level 16
LongSparseArray<E> clone ()

创建并返回此对象的副本。 “复制”的确切含义可能取决于对象的类别。 一般意图是,对于任何对象x ,表达式:

 x.clone() != x
will be true, and that the expression:
 x.clone().getClass() == x.getClass()
will be true, but these are not absolute requirements. While it is typically the case that:
 x.clone().equals(x)
will be true, this is not an absolute requirement.

按照惯例,应通过调用super.clone获得返回的对象。 如果一个类和它的所有超类( Object除外)都遵守这个约定,那么情况就是这样的x.clone().getClass() == x.getClass()

按照惯例,这个方法返回的对象应该独立于这个对象(被克隆)。 为了实现这种独立性,可能需要在返回super.clone之前修改对象的一个或多个字段。 通常,这意味着复制包含被克隆对象的内部“深层结构”的任何可变对象,并将这些对象的引用替换为对这些副本的引用。 如果一个类只包含原始字段或对不可变对象的引用,那么通常情况下,不需要修改super.clone返回的对象中的任何字段。

Object的方法clone执行特定的克隆操作。 首先,如果该对象的类没有实现接口Cloneable ,则引发CloneNotSupportedException 请注意,所有阵列都被视为实现接口Cloneable并且数组类型T[]clone方法的返回类型为T[] ,其中T是任何引用或原始类型。 否则,此方法创建该对象的类的新实例,并使用该对象的相应字段的内容来初始化其所有字段,就像通过赋值一样; 这些字段的内容本身并不克隆。 因此,此方法执行此对象的“浅拷贝”,而不是“深拷贝”操作。

Object本身并未实现接口 Cloneable ,因此在类 Object的对象上调用 clone方法将导致在运行时抛出异常。

Returns
LongSparseArray<E> a clone of this instance.

delete

Added in API level 16
void delete (long key)

如果有指定的键,则删除指定键的映射。

Parameters
key long

get

Added in API level 16
E get (long key)

获取从指定键映射的对象,或者如果没有这样的映射,则 null

Parameters
key long
Returns
E

get

Added in API level 16
E get (long key, 
                E valueIfKeyNotFound)

获取从指定键映射的Object或指定的Object,如果没有这样的映射。

Parameters
key long
valueIfKeyNotFound E
Returns
E

indexOfKey

Added in API level 16
int indexOfKey (long key)

返回 keyAt(int)将返回指定键的索引,如果指定的键未映射,则返回负数。

Parameters
key long
Returns
int

indexOfValue

Added in API level 16
int indexOfValue (E value)

返回valueAt(int)将返回指定键的索引;如果没有键映射到指定值,则返回负数。 请注意,这是一种线性搜索,与按键查找不同,并且多个键可以映射到相同的值,而这只会查找其中的一个。

Parameters
value E
Returns
int

keyAt

Added in API level 16
long keyAt (int index)

给定一个范围为 0...size()-1的索引,从此LongSparseArray存储的第 index个键值映射中返回键。

升序索引对应的索引保证为升序,例如, keyAt(0)将返回最小密钥, keyAt(size()-1)将返回最大密钥。

Parameters
index int
Returns
long

put

Added in API level 16
void put (long key, 
                E value)

添加从指定键到指定值的映射,如果有指定键,则从指定键替换以前的映射。

Parameters
key long
value E

remove

Added in API level 16
void remove (long key)

别名为 delete(long)

Parameters
key long

removeAt

Added in API level 16
void removeAt (int index)

删除指定索引处的映射。

Parameters
index int

setValueAt

Added in API level 16
void setValueAt (int index, 
                E value)

给定一个范围为 0...size()-1的索引,为此LongSparseArray存储的第 index个键值映射设置一个新值。

Parameters
index int
value E

size

Added in API level 16
int size ()

返回此LongSparseArray当前存储的键值映射的数量。

Returns
int

toString

Added in API level 16
String toString ()

返回对象的字符串表示形式。 通常, toString方法返回一个“文本表示”该对象的字符串。 结果应该是一个简洁但内容丰富的表述,对于一个人来说很容易阅读。 建议所有子类重写此方法。

ObjecttoString方法返回一个字符串,其中包含对象为实例的类的名称,符号字符“ @ ”以及对象的哈希代码的无符号十六进制表示形式。 换句话说,这个方法返回一个字符串,其值等于:

 getClass().getName() + '@' + Integer.toHexString(hashCode())
 

该实现通过遍历其映射来组成一个字符串。 如果该映射包含它自己的值,则字符串“(此映射)”将出现在它的位置。

Returns
String a string representation of the object.

valueAt

Added in API level 16
E valueAt (int index)

给定一个范围为 0...size()-1的索引,返回此LongSparseArray存储的第 index个键值映射的值。

与升序相对应的值保证与升序相关联,例如, valueAt(0)将返回与最小密钥关联的值,并且 valueAt(size()-1)将返回与最大密钥关联的值。

Parameters
index int
Returns
E

Hooray!