Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Methods](https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator#inhmethods)

# RandomGenerator.LeapableGenerator


`
public
static


interface
RandomGenerator.LeapableGenerator
`


`


implements

https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator


`

|---|
| java.util.random.RandomGenerator.LeapableGenerator |

|---|
| Known indirect subclasses [RandomGenerator.ArbitrarilyJumpableGenerator](https://developer.android.com/reference/java/util/random/RandomGenerator.ArbitrarilyJumpableGenerator) |---|---| | [RandomGenerator.ArbitrarilyJumpableGenerator](https://developer.android.com/reference/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. | |

<br />

*** ** * ** ***

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^128^), to
a very distant point in the state cycle.

Typically one will construct a series of `https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator`
objects by iterative leaping from a single original
`https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator` object, and then for each such object produce a
subseries of objects by iterative jumping. There is little conceptual
difference between leaping and jumping, but typically a leap will be a
very long jump in the state cycle (perhaps distance 2^128^ or
so).

Ideally, all `https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator` objects produced by iterative
leaping and jumping from a single original `https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator`
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 `leaps`
method is used to produce (by jumping) a number of objects no larger than
2^64^. Implementors are advised to use algorithms whose period
is at least 2^191^.

Methods are provided to perform a single leap operation and also to
produce a stream of generators produced from the original by iterative
copying and leaping of internal state. The generators produced must
implement the `https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator` interface but need not also
implement the `https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator` interface. A typical strategy for
a multithreaded application is to create a single
`https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator` object, calls its `leaps` method exactly
once, and then parcel out generators from the resulting stream, one to
each thread. Then the `https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator#jump()`() method of
each such generator be called to produce a substream of generator
objects.

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

## Summary

| ### Public methods ||
|---|---|
| ` abstract https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator` | ` https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator#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). |
| ` default https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator` | ` https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator#copyAndLeap()() ` Copy this generator, leap this generator forward, then return the copy. |
| ` abstract void` | ` https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator#leap()() ` Alter the state of this pseudorandom number generator so as to leap forward a large, fixed distance (typically 2^96^ or more) within its state cycle. |
| ` abstract double` | ` https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator#leapDistance()() ` Returns the distance by which the `https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator#leap()`() method will leap forward within the state cycle of this generator object. |
| ` default https://developer.android.com/reference/java/util/stream/Stream<https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator>` | ` https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator#leaps()() ` Returns an effectively unlimited stream of new pseudorandom number generators, each of which implements the `https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator` interface. |
| ` default https://developer.android.com/reference/java/util/stream/Stream<https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator>` | ` https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator#leaps(long)(long streamSize) ` Returns a stream producing the given `streamSize` number of new pseudorandom number generators, each of which implements the `https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator` interface. |
| ` static https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator` | ` https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator#of(java.lang.String)(https://developer.android.com/reference/java/lang/String name) ` Returns an instance of `https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator` that utilizes the `name` [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms). |

| ### Inherited methods |
|---|---|
| From interface ` https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator ` |---|---| | ` abstract https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator` | ` https://developer.android.com/reference/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). | | ` default https://developer.android.com/reference/java/util/random/RandomGenerator` | ` https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator#copyAndJump()() ` Copy this generator, jump this generator forward, then return the copy. | | ` abstract void` | ` https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator#jump()() ` Alter the state of this pseudorandom number generator so as to jump forward a large, fixed distance (typically 2^64^ or more) within its state cycle. | | ` abstract double` | ` https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator#jumpDistance()() ` Returns the distance by which the `https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator#jump()`() method will jump forward within the state cycle of this generator object. | | ` default https://developer.android.com/reference/java/util/stream/Stream<https://developer.android.com/reference/java/util/random/RandomGenerator>` | ` https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator#jumps(long)(long streamSize) ` Returns a stream producing the given `streamSize` number of new pseudorandom number generators, each of which implements the `https://developer.android.com/reference/java/util/random/RandomGenerator` interface. | | ` default https://developer.android.com/reference/java/util/stream/Stream<https://developer.android.com/reference/java/util/random/RandomGenerator>` | ` https://developer.android.com/reference/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/java/util/random/RandomGenerator` interface. | | ` static https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator` | ` https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator#of(java.lang.String)(https://developer.android.com/reference/java/lang/String name) ` Returns an instance of `https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator` that utilizes the `name` [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms). | | ` default https://developer.android.com/reference/java/util/stream/Stream<https://developer.android.com/reference/java/util/random/RandomGenerator>` | ` https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator#rngs(long)(long streamSize) ` Returns a stream producing the given `streamSize` number of new pseudorandom number generators, each of which implements the `https://developer.android.com/reference/java/util/random/RandomGenerator` interface. | | ` default https://developer.android.com/reference/java/util/stream/Stream<https://developer.android.com/reference/java/util/random/RandomGenerator>` | ` https://developer.android.com/reference/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/java/util/random/RandomGenerator` interface. | ||
| From interface ` https://developer.android.com/reference/java/util/random/RandomGenerator.StreamableGenerator ` |---|---| | ` static https://developer.android.com/reference/java/util/random/RandomGenerator.StreamableGenerator` | ` https://developer.android.com/reference/java/util/random/RandomGenerator.StreamableGenerator#of(java.lang.String)(https://developer.android.com/reference/java/lang/String name) ` Returns an instance of `https://developer.android.com/reference/java/util/random/RandomGenerator.StreamableGenerator` that utilizes the `name` [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms). | | ` default https://developer.android.com/reference/java/util/stream/Stream<https://developer.android.com/reference/java/util/random/RandomGenerator>` | ` https://developer.android.com/reference/java/util/random/RandomGenerator.StreamableGenerator#rngs(long)(long streamSize) ` Returns an effectively unlimited stream of objects, each of which implements the `https://developer.android.com/reference/java/util/random/RandomGenerator` interface. | | ` abstract https://developer.android.com/reference/java/util/stream/Stream<https://developer.android.com/reference/java/util/random/RandomGenerator>` | ` https://developer.android.com/reference/java/util/random/RandomGenerator.StreamableGenerator#rngs()() ` Returns an effectively unlimited stream of objects, each of which implements the `https://developer.android.com/reference/java/util/random/RandomGenerator` interface. | ||
| From interface ` https://developer.android.com/reference/java/util/random/RandomGenerator ` |---|---| | ` default https://developer.android.com/reference/java/util/stream/DoubleStream` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#doubles(long,%20double,%20double)(long streamSize, double randomNumberOrigin, double randomNumberBound) ` Returns a stream producing the given `streamSize` number of pseudorandomly chosen `double` values, where each value is between the specified origin (inclusive) and the specified bound (exclusive). | | ` default https://developer.android.com/reference/java/util/stream/DoubleStream` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#doubles(long)(long streamSize) ` Returns a stream producing the given `streamSize` number of pseudorandomly chosen `double` values. | | ` default https://developer.android.com/reference/java/util/stream/DoubleStream` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#doubles()() ` Returns an effectively unlimited stream of pseudorandomly chosen `double` values. | | ` default https://developer.android.com/reference/java/util/stream/DoubleStream` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#doubles(double,%20double)(double randomNumberOrigin, double randomNumberBound) ` Returns an effectively unlimited stream of pseudorandomly chosen `double` values, where each value is between the specified origin (inclusive) and the specified bound (exclusive). | | ` default https://developer.android.com/reference/java/util/stream/DoubleStream` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#equiDoubles(double,%20double,%20boolean,%20boolean)(double left, double right, boolean isLeftIncluded, boolean isRightIncluded) ` Returns an effectively unlimited stream of pseudorandomly chosen `double` values, where each value is between the specified `left` boundary and the specified `right` boundary. | | ` static https://developer.android.com/reference/java/util/random/RandomGenerator` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#getDefault()() ` Returns a `https://developer.android.com/reference/java/util/random/RandomGenerator` meeting the minimal requirement of having an [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms) whose state bits are greater than or equal 64. | | ` default https://developer.android.com/reference/java/util/stream/IntStream` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#ints(long)(long streamSize) ` Returns a stream producing the given `streamSize` number of pseudorandomly chosen `int` values. | | ` default https://developer.android.com/reference/java/util/stream/IntStream` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#ints(int,%20int)(int randomNumberOrigin, int randomNumberBound) ` Returns an effectively unlimited stream of pseudorandomly chosen `int` values, where each value is between the specified origin (inclusive) and the specified bound (exclusive). | | ` default https://developer.android.com/reference/java/util/stream/IntStream` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#ints()() ` Returns an effectively unlimited stream of pseudorandomly chosen `int` values. | | ` default https://developer.android.com/reference/java/util/stream/IntStream` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#ints(long,%20int,%20int)(long streamSize, int randomNumberOrigin, int randomNumberBound) ` Returns a stream producing the given `streamSize` number of pseudorandomly chosen `int` values, where each value is between the specified origin (inclusive) and the specified bound (exclusive). | | ` default boolean` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#isDeprecated()() ` Return true if the implementation of RandomGenerator (algorithm) has been marked for deprecation. | | ` default https://developer.android.com/reference/java/util/stream/LongStream` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#longs(long)(long streamSize) ` Returns a stream producing the given `streamSize` number of pseudorandomly chosen `long` values. | | ` default https://developer.android.com/reference/java/util/stream/LongStream` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#longs()() ` Returns an effectively unlimited stream of pseudorandomly chosen `long` values. | | ` default https://developer.android.com/reference/java/util/stream/LongStream` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#longs(long,%20long)(long randomNumberOrigin, long randomNumberBound) ` Returns an effectively unlimited stream of pseudorandomly chosen `long` values, where each value is between the specified origin (inclusive) and the specified bound (exclusive). | | ` default https://developer.android.com/reference/java/util/stream/LongStream` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#longs(long,%20long,%20long)(long streamSize, long randomNumberOrigin, long randomNumberBound) ` Returns a stream producing the given `streamSize` number of pseudorandomly chosen `long` values, where each value is between the specified origin (inclusive) and the specified bound (exclusive). | | ` default boolean` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#nextBoolean()() ` Returns a pseudorandomly chosen `boolean` value. | | ` default void` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#nextBytes(byte[])(byte[] bytes) ` Fills a user-supplied byte array with generated byte values pseudorandomly chosen uniformly from the range of values between -128 (inclusive) and 127 (inclusive). | | ` default double` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#nextDouble()() ` Returns a pseudorandom `double` value between zero (inclusive) and one (exclusive). | | ` default double` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#nextDouble(double)(double bound) ` Returns a pseudorandomly chosen `double` value between zero (inclusive) and the specified bound (exclusive). | | ` default double` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#nextDouble(double,%20double)(double origin, double bound) ` Returns a pseudorandomly chosen `double` value between the specified origin (inclusive) and the specified bound (exclusive). | | ` default double` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#nextExponential()() ` Returns a nonnegative `double` value pseudorandomly chosen from an exponential distribution whose mean is 1. | | ` default float` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#nextFloat(float,%20float)(float origin, float bound) ` Returns a pseudorandomly chosen `float` value between the specified origin (inclusive) and the specified bound (exclusive). | | ` default float` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#nextFloat()() ` Returns a pseudorandom `float` value between zero (inclusive) and one (exclusive). | | ` default float` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#nextFloat(float)(float bound) ` Returns a pseudorandomly chosen `float` value between zero (inclusive) and the specified bound (exclusive). | | ` default double` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#nextGaussian(double,%20double)(double mean, double stddev) ` Returns a `double` value pseudorandomly chosen from a Gaussian (normal) distribution with a mean and standard deviation specified by the arguments. | | ` default double` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#nextGaussian()() ` Returns a `double` value pseudorandomly chosen from a Gaussian (normal) distribution whose mean is 0 and whose standard deviation is 1. | | ` default int` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#nextInt(int,%20int)(int origin, int bound) ` Returns a pseudorandomly chosen `int` value between the specified origin (inclusive) and the specified bound (exclusive). | | ` default int` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#nextInt()() ` Returns a pseudorandomly chosen `int` value. | | ` default int` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#nextInt(int)(int bound) ` Returns a pseudorandomly chosen `int` value between zero (inclusive) and the specified bound (exclusive). | | ` default long` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#nextLong(long,%20long)(long origin, long bound) ` Returns a pseudorandomly chosen `long` value between the specified origin (inclusive) and the specified bound (exclusive). | | ` default long` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#nextLong(long)(long bound) ` Returns a pseudorandomly chosen `long` value between zero (inclusive) and the specified bound (exclusive). | | ` abstract long` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#nextLong()() ` Returns a pseudorandomly chosen `long` value. | | ` static https://developer.android.com/reference/java/util/random/RandomGenerator` | ` https://developer.android.com/reference/java/util/random/RandomGenerator#of(java.lang.String)(https://developer.android.com/reference/java/lang/String name) ` Returns an instance of `https://developer.android.com/reference/java/util/random/RandomGenerator` that utilizes the `name` [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms). | ||

## Public methods

### copy

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

```
public abstract RandomGenerator.LeapableGenerator 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).

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator` | a new object that is a copy of this generator <br /> |

### copyAndLeap

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

```
public RandomGenerator.JumpableGenerator copyAndLeap ()
```

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

<br />

##### Implementation Requirements:

- The default implementation copies this, leaps and then returns the copy.

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator` | a copy of this generator object before the leap occurred <br /> |

### leap

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

```
public abstract void leap ()
```

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

<br />

### leapDistance

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

```
public abstract double leapDistance ()
```

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

<br />

| Returns ||
|---|---|
| `double` | the default leap distance (as a `double` value) <br /> |

### leaps

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

```
public Stream<RandomGenerator.JumpableGenerator> leaps ()
```

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

<br />

##### Implementation Note:

- It is permitted to implement this method in a manner equivalent to `https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator#leaps(long)` (`https://developer.android.com/reference/java/lang/Long#MAX_VALUE`).

##### Implementation Requirements:

- The default implementation produces a sequential stream that repeatedly calls `https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator#copy()`() and `https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator#leap()`() on this generator, and the copies become the generators produced by the stream.

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/util/stream/Stream<https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator>` | a stream of objects that implement the `https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator` interface <br /> |

### leaps

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

```
public Stream<RandomGenerator.JumpableGenerator> leaps (long streamSize)
```

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

<br />

##### Implementation Requirements:

- The default implementation produces a sequential stream that repeatedly calls `https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator#copy()`() and `https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator#leap()`() on this generator, and the copies become the generators produced by the stream.

| Parameters ||
|---|---|
| `streamSize` | `long`: the number of generators to generate <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/util/stream/Stream<https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator>` | a stream of objects that implement the `https://developer.android.com/reference/java/util/random/RandomGenerator.JumpableGenerator` interface <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/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#ApiLevels)

```
public static RandomGenerator.LeapableGenerator of (String name)
```

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

<br />

| Parameters ||
|---|---|
| `name` | `String`: Name of random number generator [algorithm](https://developer.android.com/reference/java/util/random/package-summary#algorithms) <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator` | An instance of `https://developer.android.com/reference/java/util/random/RandomGenerator.LeapableGenerator` <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | if the named algorithm is not found |
| `https://developer.android.com/reference/java/lang/NullPointerException` | if name is null |