Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

# JumpableGenerator

```
interface JumpableGenerator : RandomGenerator.StreamableGenerator
```

|---|
| [java.util.random.RandomGenerator.JumpableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#) |

|---|
| Known Direct Subclasses [RandomGenerator.LeapableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.LeapableGenerator) |---|---| | [RandomGenerator.LeapableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.LeapableGenerator) | This interface is designed to provide a common protocol for objects that generate sequences of pseudorandom values and can easily not only jump but also *leap* forward, by a large amount (ex. 2 | |

|---|
| Known Indirect Subclasses [RandomGenerator.ArbitrarilyJumpableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.ArbitrarilyJumpableGenerator) |---|---| | [RandomGenerator.ArbitrarilyJumpableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.ArbitrarilyJumpableGenerator) | This interface is designed to provide a common protocol for objects that generate sequences of pseudorandom values and can easily *jump* forward, by an arbitrary amount, to a distant point in the state cycle. | |

This interface is designed to provide a common protocol for objects that generate pseudorandom values and can easily *jump* forward, by a moderate amount (ex. 264) to a distant point in the state cycle.

Ideally, all `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#` objects produced by iterative jumping from a single original `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#` object are statistically independent of one another and individually uniform. In practice, one must settle for some approximation to independence and uniformity. In particular, a specific implementation may assume that each generator in a stream produced by the `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#jump()` method is used to produce a number of values no larger than either 264 or the square root of its period. Implementors are advised to use algorithms whose period is at least 2127.

Methods are provided to perform a single jump operation and also to produce a stream of generators produced from the original by iterative copying and jumping of internal state. A typical strategy for a multithreaded application is to create a single `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#` object, calls its `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#jump()`() method exactly once, and then parcel out generators from the resulting stream, one to each thread. It is generally not a good idea to call `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#jump()`() on a generator that was itself produced by the `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#jump()`() method, because the result may be a generator identical to another generator already produce by that call to the `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#jump()`() method. For this reason, the return type of the #jumps() method is `Stream<RandomGenerator>` rather than `Stream<JumpableGenerator>`, even though the actual generator objects in that stream likely do also implement the `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#` interface.

Objects that implement `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#` are typically not cryptographically secure. Consider instead using `https://developer.android.com/reference/kotlin/java/security/SecureRandom.html#` to get a cryptographically secure pseudo-random number generator for use by security-sensitive applications.

## Summary

| Public methods ||
|---|---|
| abstract [RandomGenerator.JumpableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#)! | `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#copy()()` Returns a new generator whose internal state is an exact copy of this generator (therefore their future behavior should be identical if subjected to the same series of operations). |
| open [RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)! | `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#copyAndJump()()` Copy this generator, jump this generator forward, then return the copy. |
| abstract [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) | `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#jump()()` Alter the state of this pseudorandom number generator so as to jump forward a large, fixed distance (typically 264 or more) within its state cycle. |
| abstract [Double](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-double/index.html) | `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#jumpDistance()()` Returns the distance by which the `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#jump()`() method will jump forward within the state cycle of this generator object. |
| open [Stream](https://developer.android.com/reference/kotlin/java/util/stream/Stream.html#)\<[RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)!\>! | `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#jumps()()` Returns an effectively unlimited stream of new pseudorandom number generators, each of which implements the `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator` interface. |
| open [Stream](https://developer.android.com/reference/kotlin/java/util/stream/Stream.html#)\<[RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)!\>! | `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#jumps(kotlin.Long)(streamSize: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)` Returns a stream producing the given `streamSize` number of new pseudorandom number generators, each of which implements the `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator` interface. |
| open static [RandomGenerator.JumpableGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#)! | `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#of(kotlin.String)(name: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html!)` Returns an instance of `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#` that utilizes the `name` [algorithm](https://developer.android.com/reference/kotlin/java/util/random/package-summary#algorithms). |
| open [Stream](https://developer.android.com/reference/kotlin/java/util/stream/Stream.html#)\<[RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)!\>! | `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#rngs()()` Returns an effectively unlimited stream of new pseudorandom number generators, each of which implements the `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator` interface. |
| open [Stream](https://developer.android.com/reference/kotlin/java/util/stream/Stream.html#)\<[RandomGenerator](https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator)!\>! | `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#rngs(kotlin.Long)(streamSize: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)` Returns a stream producing the given `streamSize` number of new pseudorandom number generators, each of which implements the `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator` interface. |

## Public methods

### copy

Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
abstract fun copy(): RandomGenerator.JumpableGenerator!
```

Returns a new generator whose internal state is an exact copy of this generator (therefore their future behavior should be identical if subjected to the same series of operations).

| Return ||
|---|---|
| `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#!` | a new object that is a copy of this generator |

### copyAndJump

Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun copyAndJump(): RandomGenerator!
```

Copy this generator, jump this generator forward, then return the copy.

| Return ||
|---|---|
| `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator!` | a copy of this generator object before the jump occurred |

### jump

Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
abstract fun jump(): Unit
```

Alter the state of this pseudorandom number generator so as to jump forward a large, fixed distance (typically 264 or more) within its state cycle.

### jumpDistance

Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
abstract fun jumpDistance(): Double
```

Returns the distance by which the `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#jump()`() method will jump forward within the state cycle of this generator object.

| Return ||
|---|---|
| `https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-double/index.html` | the default jump distance (as a `double` value) |

### jumps

Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun jumps(): Stream<RandomGenerator!>!
```

Returns an effectively unlimited stream of new pseudorandom number generators, each of which implements the `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator` interface.

| Return ||
|---|---|
| `https://developer.android.com/reference/kotlin/java/util/stream/Stream.html#<https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator!>!` | a stream of objects that implement the `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator` interface |

### jumps

Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun jumps(streamSize: Long): Stream<RandomGenerator!>!
```

Returns a stream producing the given `streamSize` number of new pseudorandom number generators, each of which implements the `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator` interface.

| Parameters ||
|---|---|
| `streamSize` | [Long](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html): the number of generators to generate |

| Return ||
|---|---|
| `https://developer.android.com/reference/kotlin/java/util/stream/Stream.html#<https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator!>!` | a stream of objects that implement the `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator` interface |

| Exceptions ||
|---|---|
| `java.lang.IllegalArgumentException` | if `streamSize` is less than zero |

### of

Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open static fun of(name: String!): RandomGenerator.JumpableGenerator!
```

Returns an instance of `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#` that utilizes the `name` [algorithm](https://developer.android.com/reference/kotlin/java/util/random/package-summary#algorithms).

| Parameters ||
|---|---|
| `name` | [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)!: Name of random number generator [algorithm](https://developer.android.com/reference/kotlin/java/util/random/package-summary#algorithms) |

| Return ||
|---|---|
| `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#!` | An instance of `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator.JumpableGenerator#` |

| Exceptions ||
|---|---|
| `java.lang.IllegalArgumentException` | if the named algorithm is not found |
| `java.lang.NullPointerException` | if name is null |

### rngs

Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun rngs(): Stream<RandomGenerator!>!
```

Returns an effectively unlimited stream of new pseudorandom number generators, each of which implements the `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator` interface. Ideally the generators in the stream will appear to be statistically independent.

| Return ||
|---|---|
| `https://developer.android.com/reference/kotlin/java/util/stream/Stream.html#<https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator!>!` | a stream of objects that implement the `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator` interface |

### rngs

Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun rngs(streamSize: Long): Stream<RandomGenerator!>!
```

Returns a stream producing the given `streamSize` number of new pseudorandom number generators, each of which implements the `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator` interface. Ideally the generators in the stream will appear to be statistically independent.

| Parameters ||
|---|---|
| `streamSize` | [Long](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html): the number of generators to generate |

| Return ||
|---|---|
| `https://developer.android.com/reference/kotlin/java/util/stream/Stream.html#<https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator!>!` | a stream of objects that implement the `https://developer.android.com/reference/kotlin/java/util/random/RandomGenerator` interface |

| Exceptions ||
|---|---|
| `java.lang.IllegalArgumentException` | if `streamSize` is less than zero |