Most visited

Recently visited

Added in API level 24

CollationKey

public final class CollationKey
extends Object implements Comparable<CollationKey>

java.lang.Object
   ↳ android.icu.text.CollationKey


CollationKey表示String下一个特定的规则Collator对象。 比较两个CollationKey s将返回它们所代表的String的相对顺序。

由于Collator的规则集可能有所不同,因此两个不同Collator下的相同字符串的排序顺序可能有所不同。 因此比较CollationKey来自不同生成S- Collator S能够得到不正确的结果。

方法CollationKey.compareTo(CollationKey)和方法Collator.compare(String, String)比较两个字符串并返回它们的相对顺序。 这两种方法的性能特征可能不同。 请注意,整理键通常比简单比较效率低。 有关更多详细信息,请参阅ICU用户指南。

在构建CollationKey ,整个源字符串将被检查并处理成一系列以null结尾的位,存储在CollationKey CollationKey.compareTo(CollationKey)执行时,它会对位序列进行按位比较。 这在创建CollationKey时会导致启动成本,但一旦创建密钥,二进制比较就会很快。 如果要重复比较相同的字符串,建议使用此方法。

另一方面, Collator.compare(String, String)实现只能检查和处理字符串,直到第一个字符顺序不同。 如果字符串仅比较一次,则建议使用此方法。

关于比特序列组成的更多信息可以在 user guide中找到。

以下示例显示如何使用 CollationKey s对 String的列表进行排序。

 // Create an array of CollationKeys for the Strings to be sorted.
 Collator myCollator = Collator.getInstance();
 CollationKey[] keys = new CollationKey[3];
 keys[0] = myCollator.getCollationKey("Tom");
 keys[1] = myCollator.getCollationKey("Dick");
 keys[2] = myCollator.getCollationKey("Harry");
 sort( keys );
 
//...
// Inside body of sort routine, compare keys this way if( keys[i].compareTo( keys[j] ) > 0 ) // swap keys[i] and keys[j]
//...
// Finally, when we've returned from sort. System.out.println( keys[0].getSourceString() ); System.out.println( keys[1].getSourceString() ); System.out.println( keys[2].getSourceString() );

这个类不是可分类的

也可以看看:

Summary

Nested classes

class CollationKey.BoundMode

API CollationKey.getBound()用于根据请求的绑定模式获取CollationKey的选项。

Public constructors

CollationKey(String source, byte[] key)

CollationKey构造函数。

Public methods

int compareTo(CollationKey target)

将此CollationKey与另一个CollationKey进行比较。

boolean equals(CollationKey target)

比较此CollationKey和参数目标CollationKey的相等性。

boolean equals(Object target)

比较此CollationKey和指定的对象是否相等。

CollationKey getBound(int boundType, int noOfLevels)

为给定的整理键和强度级别生成一个排序顺序。

String getSourceString()

返回此CollationKey表示的源字符串。

int hashCode()

返回此CollationKey的哈希码。

CollationKey merge(CollationKey source)

将此CollationKey与另一个合并。

byte[] toByteArray()

复制并返回此CollationKey的值,作为由null结尾的大端字节序列。

Inherited methods

From class java.lang.Object
From interface java.lang.Comparable

Public constructors

CollationKey

Added in API level 24
CollationKey (String source, 
                byte[] key)

CollationKey构造函数。 与JDK版本不同,此构造函数被授予公共访问权限,以允许访问扩展Collator类的用户。 getCollationKey(String)

Parameters
source String: string this CollationKey is to represent
key byte: array of bytes that represent the collation order of argument source terminated by a null

也可以看看:

Public methods

compareTo

Added in API level 24
int compareTo (CollationKey target)

将此CollationKey与另一个CollationKey进行比较。 应用创建此密钥的Collator的归类规则。

注意:不同校对者创建的校对键之间的比较可能会返回不正确的结果。 请参阅班级文件。

Parameters
target CollationKey: target CollationKey
Returns
int an integer value. If the value is less than zero this CollationKey is less than than target, if the value is zero they are equal, and if the value is greater than zero this CollationKey is greater than target.
Throws
NullPointerException is thrown if argument is null.

也可以看看:

equals

Added in API level 24
boolean equals (CollationKey target)

比较此CollationKey和参数目标CollationKey的相等性。 应用创建这些对象的Collator对象的排序规则。

请参阅compareTo(CollationKey)中有关错误结果警告的说明

Parameters
target CollationKey: the CollationKey to compare to.
Returns
boolean true if two objects are equal, false otherwise.
Throws
NullPointerException is thrown when the argument is null.

equals

Added in API level 24
boolean equals (Object target)

比较此CollationKey和指定的对象是否相等。 应用创建此密钥的Collator的归类规则。

请参阅compareTo(CollationKey)中的说明,以获取有关可能的错误结果的警告。

Parameters
target Object: the object to compare to.
Returns
boolean true if the two keys compare as equal, false otherwise.
Throws
ClassCastException is thrown when the argument is not a CollationKey. NullPointerException is thrown when the argument is null.

也可以看看:

getBound

Added in API level 24
CollationKey getBound (int boundType, 
                int noOfLevels)

为给定的整理键和强度级别生成一个排序顺序。 此API不会尝试为CollationKey字符串表示找到一个边界,因此将返回null。

结果边界可用于生成一系列在上下边界之间的字符串。 例如,如果边界是针对字符串“smith”的sortkey生成的,则使用主要强度的上下界之间的字符串将包括“Smith”,“SMITH”,“sMiTh”。

有两个上限可以生产。 如果生成BoundMode.UPPER,则匹配的字符串将如上所述。 但是,如果使用BoundMode生成边界,则使用UPPER_LONG,上面的示例也将匹配“Smithsonian”和类似的。

有关使用的更多信息,请参阅测试程序 src/com/ibm/icu/dev/test/collator/CollationAPITest/TestBounds.中的示例

生成的整理键可以使用 compare API进行比较。

Parameters
boundType int: Mode of bound required. It can be BoundMode.LOWER, which produces a lower inclusive bound, BoundMode.UPPER, that produces upper bound that matches strings of the same length or BoundMode.UPPER_LONG that matches strings that have the same starting substring as the source string.
noOfLevels int: Strength levels required in the resulting bound (for most uses, the recommended value is PRIMARY). This strength should be less than the maximum strength of this CollationKey. See users guide for explanation on the strength levels a collation key can have.
Returns
CollationKey the result bounded CollationKey with a valid sort order but a null String representation.
Throws
IllegalArgumentException thrown when the strength level requested is higher than or equal to the strength in this CollationKey. In the case of an Exception, information about the maximum strength to use will be returned in the Exception. The user can then call getBound() again with the appropriate strength.

也可以看看:

getSourceString

Added in API level 24
String getSourceString ()

返回此CollationKey表示的源字符串。

Returns
String source string that this CollationKey represents

hashCode

Added in API level 24
int hashCode ()

返回此CollationKey的哈希码。 散列值是根据密钥本身计算的,而不是从中创建密钥的字符串。 因此,如果x和y是CollationKeys,则x.hashCode(x)== y.hashCode()如果x.equals(y)为true。 这允许在哈希表中进行语言敏感的比较。

Returns
int the hash value.

merge

Added in API level 24
CollationKey merge (CollationKey source)

将此CollationKey与另一个合并。 这些级别与其相应的对应级别(初级初级,二级级和次级等)合并。 插入分隔符的同一级别的值之间。

例如,这对于组合第一个和最后一个名字的排序键来对这些对进行排序很有用。 请参阅http://www.unicode.org/reports/tr10/#Merging_Sort_Keys

实现“合并”排序的推荐方法是在它们之间串联U + FFFE。 连接与合并的排序键具有相同的排序顺序,但合并(getSortKey(str1),getSortKey(str2))可能与getSortKey(str1 +'???'+ str2)不同。 使用带有U + FFFE的字符串可能会产生更短的排序键。

有关Sort Key Features的详细信息,请参阅http://userguide.icu-project.org/collation/api#TOC-Sort-Key-Features

通过连续合并另一个与中间结果可以合并多个排序键。

只有CollationKeys的排序关键字被合并。 此API不会尝试合并CollationKeys的字符串表示形式,因此将返回null作为结果的字符串表示形式。

示例(未压缩):

191B1D 01 050505 01 910505 00
 1F2123 01 050505 01 910505 00
will be merged as
191B1D 02 1F2123 01 050505 02 050505 01 910505 02 910505 00

Parameters
source CollationKey: CollationKey to merge with
Returns
CollationKey a CollationKey that contains the valid merged sort keys with a null String representation, i.e. new CollationKey(null, merged_sort_keys)
Throws
IllegalArgumentException thrown if source CollationKey argument is null or of 0 length.

toByteArray

Added in API level 24
byte[] toByteArray ()

复制并返回此CollationKey的值,作为由null结尾的大端字节序列。

如果两个CollationKeys可以合法比较,那么可以比较每个的字节数组以获得相同的结果,例如

 byte key1[] = collationkey1.toByteArray();
 byte key2[] = collationkey2.toByteArray();
 int key, targetkey;
 int i = 0;
 do {
       key = key1[i] & 0xFF;
     targetkey = key2[i] & 0xFF;
     if (key < targetkey) {
         System.out.println("String 1 is less than string 2");
         return;
     }
     if (targetkey < key) {
         System.out.println("String 1 is more than string 2");
     }
     i ++;
 } while (key != 0 && targetKey != 0);

 System.out.println("Strings are equal.");
 

Returns
byte[] CollationKey value in a sequence of big-endian byte bytes terminated by a null.

Hooray!