1. Introduction

In Kotlin, a Set is a Collection that doesn’t allow duplicate elements. There may be situations where we need to create a copy or clone of a Set to perform operations without modifying the original.

In this tutorial, we’ll explore various ways to clone a Set in Kotlin, complete with code examples using JUnit unit tests.

2. Using toSet()

The simplest way to clone a Set is to use the toSet() function. This function creates a new Set containing all the elements of the original:

@Test
fun `Clone set using toSet`() {
    val originalSet = setOf("apple", "banana", "cherry")

    val clonedSet = originalSet.toSet()

    assertEquals(originalSet, clonedSet)
    assertNotSame(originalSet, clonedSet)
}

In this example, we use JUnit to write a unit test that demonstrates how to clone a Set using the toSet() function. We also verify that we have a new Set by ensuring that clonedSet isn’t the exact same object as originalSet.

3. Using toMutableSet()

If we need a mutable clone of a Set, we can use the toMutableSet() function:

@Test
fun `Clone set using toMutableSet`() {
    val originalSet = setOf("apple", "banana", "cherry")
    val clonedSet = originalSet.toMutableSet()

    assertEquals (originalSet, clonedSet)
    assertNotSame(originalSet, clonedSet)

    assertInstanceOf(MutableSet::class.java, clonedSet)
}

Here, we’ve also confirmed that clonedSet is mutable by verifying if it’s an instance of MutableSet.

4. Using the Set Constructor

Another way to clone a Set is by using the Set constructor. We can pass the original Set as an argument to the constructor to create a copy.

Let’s see how to do that with a HashSet:

@Test
fun `Clone set using constructor`() {
    val originalSet = setOf("apple", "banana", "cherry")

    val clonedSet = HashSet(originalSet)

    assertEquals(originalSet, clonedSet)
    assertNotSame(originalSet, clonedSet)
}

5. Conclusion

In this article, we saw that cloning a Set in Kotlin is straightforward. We discussed various methods using JUnit unit tests.

Whether we use toSet(), toMutableSet(), or the Set constructor, we can confidently work with cloned Sets without modifying the original data.

As always, the code used in this tutorial is available over on GitHub.

Comments are open for 30 days after publishing a post. For any issues past this date, use the Contact form on the site.