前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java List 最常用的 4 种去重方法以及性能对比测试数据(使用Kotlin 语言编程)

Java List 最常用的 4 种去重方法以及性能对比测试数据(使用Kotlin 语言编程)

作者头像
一个会写诗的程序员
发布2020-04-02 10:18:21
2.3K0
发布2020-04-02 10:18:21
举报

对一个 List 列表里的元素去重, 是我们在平时工作项目中经常用到的操作, 这里给出常用的 4 中去重算法, 并给出了性能测试对比数据.

算法源代码

代码语言:javascript
复制
package i

import java.util.*
import kotlin.collections.HashSet

/**
 * @author: Jack
 * 2020-03-28 13:33
 */


/**
 * 使用List集合contains方法循环遍历
 */
fun uniqList1(list: List<Int>): List<Int> {
    val result = mutableListOf<Int>()
    for (e in list) {
        if (!result.contains(e)) {
            result.add(e)
        }
    }
    return result
}

/**
 * 使用 HashSet
 */
fun uniqList2(list: List<Int>): List<Int> {
    val set = HashSet(list)
    val result = mutableListOf<Int>()
    result.addAll(set)
    return result
}

/**
 * 使用 TreeSet
 */
fun uniqList3(list: List<Int>): List<Int> {
    val set = TreeSet(list)
    val result = mutableListOf<Int>()
    result.addAll(set)
    return result
}

/**
 * 使用 stream API
 */
fun uniqList4(list: List<Int>): List<Int> {
    return list.distinct()
}


/**
 * 性能测试代码
 */
fun main() {
    val list1 = mutableListOf<Int>()
    val list2 = mutableListOf<Int>()
    val list3 = mutableListOf<Int>()
    val list4 = mutableListOf<Int>()

    val random = Random()

    for (i in 0..10000000) {
        val value = random.nextInt(500)
        list1.add(value)
        list2.add(value)
        list3.add(value)
        list4.add(value)
    }

    var startTime = 0L
    var endTime = 0L

    startTime = System.currentTimeMillis()
    uniqList1(list1)
    endTime = System.currentTimeMillis()
    println("使用 contains 方法 uniq1:${endTime - startTime}")

    startTime = System.currentTimeMillis()
    uniqList2(list2)
    endTime = System.currentTimeMillis()
    println("使用 HashSet uniq2:${endTime - startTime}")

    startTime = System.currentTimeMillis()
    uniqList3(list3)
    endTime = System.currentTimeMillis()
    println("使用 TreeSet uniq3:${endTime - startTime}")

    startTime = System.currentTimeMillis()
    uniqList4(list4)
    endTime = System.currentTimeMillis()
    println("使用 stream API uniq4:${endTime - startTime}")

}

性能测试结果

性能数据:

代码语言:javascript
复制
使用 contains 方法 uniq1:1648
使用 HashSet uniq2:344
使用 TreeSet uniq3:598
使用 stream API uniq4:177

结论: 千万级别的数据量, Stream API 的性能最优秀.

测试机器配置:

代码语言:javascript
复制
型号名称:   MacBook Pro
  型号标识符:    MacBookPro15,1
  处理器名称:    Intel Core i7
  处理器速度:    2.6 GHz
  处理器数目:    1
  核总数:  6
  L2 缓存(每个核):   256 KB
  L3 缓存:    12 MB
  超线程技术:    已启用
  内存:   16 GB
  Boot ROM 版本:  220.260.171.0.0 (iBridge: 16.16.5200.0.0,0)
  序列号(系统):  C02Z43JXLVCF
  硬件 UUID:  FAAEE2DB-8F7C-54B1-A0B7-F286C27EA35F

内存插槽:

  ECC:  已停用
  可升级内存:    否

BANK 0/ChannelA-DIMM0:

  大小:   8 GB
  类型:   DDR4
  速度:   2400 MHz
  状态:   好
  制造商:  Micron
  部件号:  8ATF1G64HZ-2G6E1
  序列号:  -

BANK 2/ChannelB-DIMM0:

  大小:   8 GB
  类型:   DDR4
  速度:   2400 MHz
  状态:   好
  制造商:  Micron
  部件号:  8ATF1G64HZ-2G6E1
  序列号:  -
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 算法源代码
  • 性能测试结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档