Java : UUID - API使用例

UUID (Java SE 17 & JDK 17) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。


概要

クラス構成

UUID (universally unique identifier)を表すクラスです。
このクラスは不変オブジェクトとなります。

UUID.randomUUID を使うことで、ぶつかることのない一意なIDを作成できます。
(確率的には、偶然ぶつかるIDを生成する可能性は0ではありません。ただ、それは非常に小さな確率で、一般的に無視できるとされています)

final var uuid1 = UUID.randomUUID();
System.out.println(uuid1); // "4f9d5cb7-9975-4d61-98f7-899c7b66c5e6"

final var uuid2 = UUID.randomUUID();
System.out.println(uuid2); // "a4019056-b6b7-4f67-ade7-dfadb820e8d1"

UUIDクラスには、UUIDバージョン3(UUID.nameUUIDFromBytes)とバージョン4(UUID.randomUUID)を作成するメソッドがあります。
バージョン1やバージョン5を作成するメソッドはありません。

他には、コンストラクタUUID.fromString で任意のUUIDを作成することもできます。
ただし、正しいUUIDのフォーマット(バージョンやバリアント)で値を指定するのは使う側の責任となります。

コンストラクタ

UUID (long mostSigBits, long leastSigBits)

指定されたデータを使用して、新しいUUIDを構築します。

// バージョン1の例です。
final var uuid = new UUID(0xd31d8b5fe2ff11ebL, 0xa541aaaaaaaaaaaaL);

System.out.println(uuid); // "d31d8b5f-e2ff-11eb-a541-aaaaaaaaaaaa"
System.out.println(uuid.version()); // 1

メソッド

int clockSequence ()

このUUIDに関連したクロック・シーケンス値

final var uuid = new UUID(0xd31d8b5fe2ff11ebL, 0xa541aaaaaaaaaaaaL);

System.out.println(uuid); // "d31d8b5f-e2ff-11eb-a541-aaaaaaaaaaaa"
System.out.println(uuid.version()); // 1
System.out.println(Long.toHexString(uuid.clockSequence())); // "2541"

int compareTo (UUID val)

このUUIDを指定されたUUIDと比較します。

final var uuid1 = UUID.randomUUID();
final var uuid2 = UUID.randomUUID();

System.out.println(uuid1); // "806d3fc7-1082-4e1b-963f-9d1393a154cd"
System.out.println(uuid2); // "a7c47ab4-24bb-4867-9eef-ec6290a07250"

System.out.println(uuid1.compareTo(uuid1)); // 0
System.out.println(uuid1.compareTo(uuid2)); // -1
System.out.println(uuid2.compareTo(uuid1)); // 1

boolean equals (Object obj)

このオブジェクトを指定されたオブジェクトと比較します。

final var uuid1 = UUID.randomUUID();
final var uuid2 = UUID.randomUUID();
final var uuid3 = new UUID(uuid2.getMostSignificantBits(), uuid2.getLeastSignificantBits());

System.out.println(uuid1); // "d9b55327-b047-4118-b9dc-2871a643d4c7"
System.out.println(uuid2); // "4c3051c0-8e2e-4085-965c-22565e7936bd"
System.out.println(uuid3); // "4c3051c0-8e2e-4085-965c-22565e7936bd"

System.out.println(uuid1.equals(uuid2)); // false
System.out.println(uuid1.equals(uuid3)); // false

System.out.println(uuid2 != uuid3); // true
System.out.println(uuid2.equals(uuid3)); // true

static UUID fromString (String name)

toString()メソッドに説明されているように、文字列標準表現からUUIDを作成します。

final var uuid = UUID.fromString("d9b55327-b047-4118-b9dc-2871a643d4c7");
System.out.println(uuid); // "d9b55327-b047-4118-b9dc-2871a643d4c7"

long getLeastSignificantBits ()

このUUIDの128ビット値の最下位64ビットを返します。

final var mostSigBits = 0xd31d8b5fe2ff11ebL;
final var leastSigBits = 0xa541aaaaaaaaaaaaL;

final var uuid = new UUID(mostSigBits, leastSigBits);

System.out.println(uuid); // "d31d8b5f-e2ff-11eb-a541-aaaaaaaaaaaa"
System.out.println(Long.toHexString(uuid.getMostSignificantBits())); // "d31d8b5fe2ff11eb"
System.out.println(Long.toHexString(uuid.getLeastSignificantBits())); // "a541aaaaaaaaaaaa"

System.out.println(mostSigBits == uuid.getMostSignificantBits()); // true
System.out.println(leastSigBits == uuid.getLeastSignificantBits()); // true

long getMostSignificantBits ()

このUUIDの128ビット値の最上位64ビットを返します。

getLeastSignificantBitsの使用例にgetMostSignificantBitsもまとめて記載しました。
API使用例はそちらをご参照ください。

int hashCode ()

このUUIDのハッシュ・コードを返します。

final var uuid1 = UUID.randomUUID();
final var uuid2 = UUID.randomUUID();

System.out.println(uuid1); // "e0e45f19-5e7a-4216-b2f1-6fa4ef0dda58"
System.out.println(uuid2); // "c9de186d-e7cc-425e-bb99-7bdded2b57b6"

System.out.println(uuid1.hashCode()); // -480073485
System.out.println(uuid2.hashCode()); // 2023781976

static UUID nameUUIDFromBytes (byte[] name)

指定されたバイト配列に基づく、タイプ3 (名前ベース) UUID取得用のStaticファクトリです。

バージョン3として生成されます。(バージョン5ではないのでご注意ください)

final var name = "example.com";
final var uuid = UUID.nameUUIDFromBytes(name.getBytes());

System.out.println(uuid); // "5ababd60-3b22-3803-82dd-8d83498e5172"
System.out.println(uuid.version()); // 3

long node ()

このUUIDに関連したノード値

final var uuid = new UUID(0xd31d8b5fe2ff11ebL, 0xa541aaaaaaaaaaaaL);

System.out.println(uuid); // "d31d8b5f-e2ff-11eb-a541-aaaaaaaaaaaa"
System.out.println(uuid.version()); // 1
System.out.println(Long.toHexString(uuid.node())); // "aaaaaaaaaaaa"

static UUID randomUUID ()

タイプ4 (擬似ランダム生成) UUIDを取得するためのstaticファクトリ。

IntStream.range(0, 10).forEach(i -> {
    final var uuid = UUID.randomUUID();
    System.out.println(uuid);
});

// 結果
// ↓
//5406c135-12ca-48cb-9eec-12db24656d59
//ae9903c3-63f2-4e65-a2f8-f560ded28e6e
//3989c048-b9f3-423e-a783-7ebe889cd945
//40ea47fa-ca8f-4a55-be41-d0ae02d748cf
//a5e9c128-3e67-4997-bb84-d70716104d48
//bb0e7ae1-ce38-4cf8-96c9-eaf5a9d2ba08
//f8b156ea-ee1d-4f69-b0f1-651fb8ee7052
//114b86a0-001d-4993-a9e9-08dc8216a44c
//36627b5d-0815-4640-bd34-32336f9aceb0
//29a21c8e-5ef1-40df-b7d9-1ad6bc5de47c

long timestamp ()

このUUIDに関連したタイムスタンプ値

final var uuid = new UUID(0xd31d8b5fe2ff11ebL, 0xa541aaaaaaaaaaaaL);

System.out.println(uuid); // "d31d8b5f-e2ff-11eb-a541-aaaaaaaaaaaa"
System.out.println(uuid.version()); // 1

// timestampは、1582年10月15日UTCの深夜零時から100ナノ秒単位で計測された値です。
final var timestamp = uuid.timestamp();
System.out.println(timestamp); // 138453801951398751

final var baseTime = LocalDateTime.of(1582, 10, 15, 0, 0, 0);

// 秒にまるめます。
final var seconds = timestamp / 10000000;
final var duration = Duration.ofSeconds(seconds);

final var time = baseTime.plus(duration);
System.out.println(time); // 2021-07-12T10:56:35

String toString ()

このUUIDを表すStringオブジェクトを返します。

final var uuid = UUID.nameUUIDFromBytes("example.com".getBytes());
final var str = uuid.toString();
System.out.println(str); // "5ababd60-3b22-3803-82dd-8d83498e5172"
final var uuid = UUID.randomUUID();
final var str = uuid.toString();
System.out.println(str); // "3c242fc2-dad0-4646-b9ac-fce3110edcfc"

int variant ()

このUUIDに関連付けられた形式番号です。

final var uuid = UUID.nameUUIDFromBytes("example.com".getBytes());

System.out.println(uuid); // "5ababd60-3b22-3803-82dd-8d83498e5172"
System.out.println(uuid.version()); // 3
System.out.println(uuid.variant()); // 2
final var uuid = UUID.randomUUID();

System.out.println(uuid); // "f9efac68-ee3c-4cb4-ae4d-516cefb3704e"
System.out.println(uuid.version()); // 4
System.out.println(uuid.variant()); // 2

int version ()

このUUIDに関連付けられたバージョン番号です。

variantの使用例にversionもまとめて記載しました。
API使用例はそちらをご参照ください。


関連記事

ページの先頭へ