小编Poo*_*oya的帖子

AbstractList.java中RandomAccess的操作

在RandomAccess的java doc中,类编写了"List实现使用的Marker接口,表明它们支持快速(通常是恒定时间)随机访问.此接口的主要目的是允许通用算法改变它们的行为以提供良好的性能.适用于随机或顺序访问列表."

但我发现了一些奇怪的事情

这是java.util包中AbstractList.java中的subList方法

public List<E> subList(int fromIndex, int toIndex) {
    return (this instanceof RandomAccess ?
            new RandomAccessSubList<>(this, fromIndex, toIndex) :
            new SubList<>(this, fromIndex, toIndex));
}
Run Code Online (Sandbox Code Playgroud)

RandomAccessSubList类的实现:

class RandomAccessSubList<E> extends SubList<E> implements RandomAccess {
    RandomAccessSubList(AbstractList<E> list, int fromIndex, int toIndex) {
        super(list, fromIndex, toIndex);
    }

    public List<E> subList(int fromIndex, int toIndex) {
        return new RandomAccessSubList<>(this, fromIndex, toIndex);
    }
}
Run Code Online (Sandbox Code Playgroud)

SubList类实现:

SubList(AbstractList<E> list, int fromIndex, int toIndex) {
    if (fromIndex < 0)
        throw new IndexOutOfBoundsException("fromIndex = " + fromIndex);
    if (toIndex …
Run Code Online (Sandbox Code Playgroud)

java collections random-access

5
推荐指数
1
解决办法
1390
查看次数

将Scala数组转换为Java数组的最快方法

我在Java中有一个带有此签名的方法void setActiveProfiles(String... profiles),在Java中,我可以将一个字符串数组传递给此方法.我想调用该方法并传递它Array[String],但我得到了Type mismatch错误.我的问题是将Scala数组转换为Java数组的最佳和最佳方法是什么?

这是编译错误的主体:

type mismatch;
 found   : Array[String]
 required: String
Run Code Online (Sandbox Code Playgroud)

scala

5
推荐指数
1
解决办法
2004
查看次数

最优化的方法来更新Scala中的二维数组元素

这段代码用一些随机值更新了二维数组的所有元素,还有另外一个简单的短代码来解决这个问题吗?

val terrainTypes = TerrainBlockType.values

(0 until width).foreach(i => {
    (0 until height).foreach(j => {
        val r = Random.nextInt(terrainTypes.length)
        terrainMap(i)(j) = terrainTypes(r)
    })
})
Run Code Online (Sandbox Code Playgroud)

scala

4
推荐指数
2
解决办法
415
查看次数

如何在Scala中覆盖=运算符

有没有办法覆盖或重载=Scala中的类内的运算符,以隐式转换数据而不定义隐式方法?

例如 :

class A{
    def =(str:String)={
       .........
    }
}
.........
val a=new A
a="TEST"
Run Code Online (Sandbox Code Playgroud)

scala

3
推荐指数
2
解决办法
363
查看次数

在Scala中的类定义之后的第一行中,lambda定义的语句是什么?

a=>以下代码的含义是什么?它是一个像this实例化对象的指针?

class A {
  a=>
  def methodB()={
     .....
  }
}
Run Code Online (Sandbox Code Playgroud)

scala

3
推荐指数
1
解决办法
116
查看次数

为什么我不能将字段添加到scala隐式类?

为什么你不能在隐式类中添加字段?

例如,下面的代码不存储originalName字段

object Implicit1 {

  implicit class AI1(c: Class[_]) {
    private var originalName = ""

    def setOriginalName(str: String) = originalName = str

    def getOriginalName=originalName
  }
}
Run Code Online (Sandbox Code Playgroud)

scala

3
推荐指数
1
解决办法
343
查看次数

如何在Scala中的已定义对象中迭代内部对象

我的问题是如何使用Scala迭代Scala中定义的对象中的内部对象reflection package

object Units {

    val values = CITIZEN :: WORKER :: Nil // I need something reflectional to list all of the case objects

    case object CITIZEN extends Population
    case object WORKER extends Population
}
Run Code Online (Sandbox Code Playgroud)

scala

2
推荐指数
1
解决办法
251
查看次数

如何使用带构造函数的抽象类扩展Scala中的对象?

如何使用具有构造函数的抽象类扩展Scala中的对象,并且对象的apply方法将对象作为抽象的子类型返回?

例如 :

abstract class AbstractResource(amount:Int) {
    val amount:Int
    def getAmount = amount
}


case object Wood extends AbstractResource{
    def apply(amount: Int) = {
        // something that returns the subtype
   }
}
Run Code Online (Sandbox Code Playgroud)

我认为一个很好的解决方案是:

abstract class AbstractResource {
    val amount: Int = 0

    def getAmount = amount
}


case object Wood extends AbstractResource {
    def apply(quantity: Int) = {
        new AbstractResource {
            override val amount = quantity
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我的问题是我无法编辑AbstractResource

scala

2
推荐指数
1
解决办法
2990
查看次数

2
推荐指数
1
解决办法
324
查看次数

在python中监视线程同步

有没有办法使用监听线程同步像java方法同步,在python类中确保线程安全并避免竞争条件?

我想要一个像同步机制这样的监视器,它只允许在我的类或对象中调用一个方法

python synchronization

1
推荐指数
1
解决办法
4509
查看次数

在Scala中同时接受可变和不可变映射的方法

如何将此方法的签名更改为既接受可变映射又接受不可变映射的方法?

def - [A <: BothType] (o: A): ResourceHashMap = {
    o.forall {
        case (k, v) => this.contains(k) && this(k) >= v
    } match {
        case true => map {
            case (k, v) => k -> (v - o.getOrElse(k, 0))
        }
        case _ => null
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用Maptrait,但是它没有foreall和getOrElse方法

scala

1
推荐指数
1
解决办法
291
查看次数