何ですか、この動きは。
「Preference から Set を取得後、追加して再保存する」
問題なく以下のようなテストも通過します。
@Test fun getStringSet() {
  val key = "key"
  val preferences = context.getSharedPreferences(key, Context.MODE_PRIVATE)
  val beforeData = preferences.getStringSet(key, mutableSetOf())
  val beforeSize = beforeData.size
  beforeData.add(System.currentTimeMillis().toString())
  preferences.edit()
      .putStringSet(key, beforeData)
      .commit()
  val afterData = preferences.getStringSet(key, mutableSetOf())
  val afterSize = afterData.size
  println("$beforeData -> $afterData")
  println("$beforeSize -> $afterSize")
  assertEquals(beforeSize + 1, afterSize)
}
I/System.out: [1520865219872, 1520865358333] -> [1520865219872, 1520865358333]
I/System.out: 1 -> 2
しかし、何回実行してもデータが1つのままで増えていきません。
I/System.out: [1520865219872, 1520865504185] -> [1520865219872, 1520865504185]
I/System.out: 1 -> 2
I/System.out: [1520865219872, 1520865553254] -> [1520865219872, 1520865553254]
I/System.out: 1 -> 2
実際にファイルを確認してみると、
mako:/data/data/com.example.cryptocurrency/shared_prefs # cat key.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <set name="key">
        <string>1520865219872</string>
    </set>
</map>
1つしか保存されてないですね!
クソですね!
なぜなのか?
android - Misbehavior when trying to store a string set using SharedPreferences - Stack Overflow
Android compares the modified HashSet that you are trying to save using SharedPreferences.Editor.putStringSet with the current one stored on the SharedPreference, and both are the same object!!!
A possible solution is to make a copy of the Set
returned by the SharedPreferences object 
どうやら、同じオブジェクトの比較となるので保存してくれないようです。
読み出し後、すぐコピーすればいいのですね!
val beforeData = preferences.getStringSet(key, mutableSetOf()).toMutableSet()
なんとなく、よくある話のような気がします。
 
		 
          