# CopyOnWriteMultiset

Artifact: [androidx.media3:media3-common](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/common/util/CopyOnWriteMultiset.java+class:androidx.media3.common.util.CopyOnWriteMultiset)

*** ** * ** ***


```
@UnstableApi
public final class CopyOnWriteMultiset<E extends Object> implements Iterable<E>
```

<br />

*** ** * ** ***

An unordered collection of elements that allows duplicates, but also allows access to a set of unique elements.

This class is thread-safe using the same method as `https://developer.android.com/reference/java/util/concurrent/CopyOnWriteArrayList.html`. Mutation methods cause the underlying data to be copied. `https://developer.android.com/reference/androidx/media3/common/util/CopyOnWriteMultiset#elementSet()` and `https://developer.android.com/reference/androidx/media3/common/util/CopyOnWriteMultiset#iterator()` return snapshots that are unaffected by subsequent mutations.

Iterating directly on this class reveals duplicate elements. Unique elements can be accessed via `https://developer.android.com/reference/androidx/media3/common/util/CopyOnWriteMultiset#elementSet()`. Iteration order for both of these is not defined.

| Parameters |
|---|---|
| `<E extends https://developer.android.com/reference/java/lang/Object.html>` | The type of element being stored. |

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/common/util/CopyOnWriteMultiset#CopyOnWriteMultiset()()` |

| ### Public methods |
|---|---|
| `void` | `https://developer.android.com/reference/androidx/media3/common/util/CopyOnWriteMultiset#add(E)(E element)` Adds `element` to the multiset. |
| `int` | `https://developer.android.com/reference/androidx/media3/common/util/CopyOnWriteMultiset#count(E)(E element)` Returns the number of occurrences of an element in this multiset. |
| `https://developer.android.com/reference/java/util/Set.html<E>` | `https://developer.android.com/reference/androidx/media3/common/util/CopyOnWriteMultiset#elementSet()()` Returns a snapshot of the unique elements currently in this multiset. |
| `https://developer.android.com/reference/java/util/Iterator.html<E>` | `https://developer.android.com/reference/androidx/media3/common/util/CopyOnWriteMultiset#iterator()()` Returns an iterator over a snapshot of all the elements currently in this multiset (including duplicates). |
| `void` | `https://developer.android.com/reference/androidx/media3/common/util/CopyOnWriteMultiset#remove(E)(E element)` Removes `element` from the multiset. |

### Inherited methods

From [java.lang.Iterable](https://developer.android.com/reference/java/lang/Iterable.html) `void` `https://developer.android.com/reference/java/lang/Iterable.html#forEach(java.util.function.Consumer&lt;? super T&gt;)(https://developer.android.com/reference/java/util/function/Consumer.html<T> action)` `https://developer.android.com/reference/java/util/Spliterator.html<T>` `https://developer.android.com/reference/java/lang/Iterable.html#spliterator()()`

## Public constructors

### CopyOnWriteMultiset

```
public CopyOnWriteMultiset()
```

## Public methods

### add

```
public void add(E element)
```

Adds `element` to the multiset.

| Parameters |
|---|---|
| `E element` | The element to be added. |

### count

```
public int count(E element)
```

Returns the number of occurrences of an element in this multiset.

### elementSet

```
public Set<E> elementSet()
```

Returns a snapshot of the unique elements currently in this multiset.

Changes to the underlying multiset are not reflected in the returned value.

| Returns |
|---|---|
| `https://developer.android.com/reference/java/util/Set.html<E>` | An unmodifiable set containing the unique elements in this multiset. |

### iterator

```
public Iterator<E> iterator()
```

Returns an iterator over a snapshot of all the elements currently in this multiset (including duplicates).

Changes to the underlying multiset are not reflected in the returned value.

| Returns |
|---|---|
| `https://developer.android.com/reference/java/util/Iterator.html<E>` | An unmodifiable iterator over all the elements in this multiset (including duplicates). |

### remove

```
public void remove(E element)
```

Removes `element` from the multiset.

| Parameters |
|---|---|
| `E element` | The element to be removed. |