美文网首页Unity3d手游开发
基于线程安全的List随机乱序扩展方法

基于线程安全的List随机乱序扩展方法

作者: RickyYang | 来源:发表于2018-12-18 01:17 被阅读0次

首先抛出个问题,怎么获得一个既安全有效,又方便调用的乱序List呢?

其实代码很简单,但又非常有意思,如下所示:

using System;
using System.Text;
using System.Threading;
using System.Collections.Generic;

public static class ThreadSafeRandom
{
    [ThreadStatic]
    private static Random Local;
 
    public static Random ThreadsRandom
    {
        get
        {
            return Local ?? (Local = new Random(unchecked(Environment.TickCount * 31 + Thread.CurrentThread.ManagedThreadId)));
        }
    }
}
 
public static class Extensions
{
    public static void Shuffle<T>(this IList<T> list)
    {
        int n = list.Count;
        while (n > 1)
        {
            n--;
            int k = ThreadSafeRandom.ThreadsRandom.Next(n + 1);
            T value = list[k];
            list[k] = list[n];
            list[n] = value;
        }
    }
 
    public static void Clear(this StringBuilder value)
    {
        value.Length = 0;
        value.Capacity = 0;
        value.Capacity = 16;
    }
}

因为是Extensions方法,只要如下这么调用即可:

List<T> list = new List<T>();
list.Shuffle();

这样就可以list里的数据就可是随机乱序的了,是不是很简单呢?

相关文章

  • 基于线程安全的List随机乱序扩展方法

    首先抛出个问题,怎么获得一个既安全有效,又方便调用的乱序List呢? 其实代码很简单,但又非常有意思,如下所示: ...

  • 面试复习-Java集合类

    1.List ArrayList:基于动态数组实现,支持随机访问。是线程不安全的。多线程应使用Collection...

  • 使用ArrayList时设置初始容量的重要性

    ArrayList是Java中比较常用的一个类,它是基于数组实现,非线程安全,可快速随机访问List中的元素。 A...

  • List + Set + Map + Queue

    List ArrayList平时使用的最多的list,内部基于随机数组实现,set和get的方法效率较高,默认容量...

  • interface List

    它继承了Collection接口并且扩展了基于下标的随机访问的方法 基于下标的添加 public void add...

  • CopyOnWriteArrayList 中的隐藏的知识,你Ge

    线程安全 List 在 Java 中,线程安全的 List 不止一个,除了今天的主角CopyOnWriteArra...

  • java.util系列源码解读之Vector

    Vector是java中线程安全的list,每个公有方法均被synchronized修饰, 在多线程环境下推荐使用...

  • java中的集合类

    Collection: List:有序集合,通过索引来访问元素。 Arraylist:线程不同步不安全 基于动...

  • 集合

    List都是线程不安全的,而Vector是线程安全的,都是数组实现。HashMap是线程安全的,HashTable...

  • Java 集合类

    1 List  1.1 ArrayList   基于数组实现,按照插入顺序排序,可重复,线程不安全,默认初始化为空...

网友评论

    本文标题:基于线程安全的List随机乱序扩展方法

    本文链接:https://www.haomeiwen.com/subject/emahkqtx.html