小编Jol*_*onB的帖子

为什么列表的反向子列表的List.addAll导致ConcurrentModificationException

我一直在尝试获取列表子列表,将其反转,然后将反转的列表放回起始位置。例如,假设我们拥有列表[1, 2, 3, 4, 5, 6],然后从索引2反转到索引4将得到[1, 2, 5, 4, 3, 6]

我为此编写了一些代码,但是ConcurrentModificationException每次都给出一个代码(除非startIndex == endIndex)。下面提供了一个最小的可重现示例:

int startIndex = 2;
int endIndex = 4;
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6);

List<Integer> toReverse = list.subList(startIndex, endIndex+1);
Collections.reverse(toReverse);
list.removeAll(toReverse);
list.addAll(startIndex, toReverse);
Run Code Online (Sandbox Code Playgroud)

异常线程“main” java.util.ConcurrentModificationException
在java.util.ArrayList中的$ SubList.checkForComodification(来源不明)
在java.util.ArrayList的$ SubList.size(来源不明)在
java.util.AbstractCollection.toArray(来源不明)在 test.ConcurrentExample.main(ConcurrentExample.java:64)处
java.util.ArrayList.addAll(Unknown Source

错误所指的实际行是list.addAll(startIndex, toReverse);

我不确定是什么问题,因为迭代过程中似乎没有任何变化。如果有人能解释为什么会这样和/或如何解决它,将不胜感激。

java collections arraylist concurrentmodification

16
推荐指数
2
解决办法
145
查看次数

创建抽象类或匿名类的实例

在这段代码中,它是创建抽象类或匿名类的对象吗?请告诉我.我在这里有点困惑.

public abstract class AbstractDemo {

    abstract void showMessage();
    abstract int add(int x,int y);

    public int mul(int x,int y){
        return x+y;
    }


    public static void main(String[] args) {
        AbstractDemo ad = new AbstractDemo() {

            @Override
            void showMessage() {
                // TODO Auto-generated method stub

            }

            @Override
            int add(int x, int y) {
                // TODO Auto-generated method stub
                return 0;
            }
        };

        System.out.println(ad.mul(10, 12));
        System.out.println(ad.getClass());
    }

}
Run Code Online (Sandbox Code Playgroud)

java syntax class

12
推荐指数
3
解决办法
3万
查看次数

如何在没有警告的情况下创建 JavaFX TableView?

我正在按照Oracle教程在 JavaFX 中创建 TableView。在这个屏幕截图中,我复制并粘贴了代码,但出现了几个错误,教程中没有提到这些错误。

在此处输入图片说明

TableView 上的警告说:

TableView 是一种原始类型。对泛型类型 TableView<?S> 的引用应该被参数化

TableColumn 上的警告说:

TableColumn 是原始类型。对泛型类型 TableColumn<?S,T> 的引用应该被参数化

addAll 方法上的警告说:

类型安全:addAll(Object...) 方法属于原始类型 ObservableList。对泛型类型 ObservableList<?E> 的引用应该被参数化

我查看了文档,发现它们确实需要参数(这很令人困惑,因为教程没有提到这一点),但我不明白它们应该是什么。如果我做

TableView<String> table = new TableView<>();
Run Code Online (Sandbox Code Playgroud)

TableColumn<String, String> tableCol = new TableColumn<>(...);
Run Code Online (Sandbox Code Playgroud)

我仍然收到关于 addAll 方法的警告,其中说:

类型安全:为可变参数创建一个 TableColumn<?String,?> 的通用数组

我真的无法理解类型参数的期望值。我知道我可以抑制警告,但这似乎是不好的做法。我该怎么办?

java user-interface types javafx tableview

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

DEAP中具有多个权重的适应度函数

我正在学习使用 Python DEAP 模块,并且创建了一个最小化适应度函数和一个评估函数。我用于健身功能的代码如下:

ct.create("FitnessFunc", base.Fitness, weights=(-0.0001, -100000.0))
Run Code Online (Sandbox Code Playgroud)

请注意重量差异非常大。这是因为Fitness 的 DEAP 文档说:

权重还可用于改变每个目标相对于另一个目标的重要性。这意味着权重可以是任何实数,并且仅使用符号来确定是否进行最大化或最小化。

对我来说,这意味着你可以通过增大一个权重来优先考虑另一个权重。


我正在使用algorithms.eaSimple(通过名人堂)来进化,并且使用 来选择群体中最好的个体tools.selTournament

评估函数返回abs(sum(input)), len(input)。运行后,我从 HallOfFame 中获取值并对其进行评估,但是,输出类似于以下内容(行尾的数字是我添加的):

(154.2830144, 3)            1
(365.6353634, 4)            2
(390.50576340000003, 3)     3
(390.50576340000003, 14)    4
(417.37616340000005, 4)     5
Run Code Online (Sandbox Code Playgroud)

让我困惑的是,我认为文档指出较大的第二个权重意味着len(input)会产生更大的影响,并会产生如下输出:

(154.2830144, 3)            1
(365.6353634, 4)            2
(390.50576340000003, 3)     3
(417.37616340000005, 4)     5
(390.50576340000003, 14)    4
Run Code Online (Sandbox Code Playgroud)

请注意,第 4 行和第 5 行交换了位置。这是因为第 4 行的权重比第 5 行的权重大得多。

看来,适应度实际上是首先根据第一个元素进行评估的,然后仅当第一个元素之间存在平局时才考虑第二个元素。如果是这样的话,那么设置除-1或+1以外的权重的目的是什么?

python machine-learning deap

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

如何在Python 3中对整数使用','.join(var)?

我从这个问题中学到了可以", ".join(var)在Python 中使用数组连接值.此代码适用于字符串,例如:

var = ["hello","world"]
print (", ".join(var))
Run Code Online (Sandbox Code Playgroud)

给出hello, world我想要的输出.

但是,当我在数组中使用数字时:

var = [1,2,3]
print (", ".join(var))
Run Code Online (Sandbox Code Playgroud)

它给出了一条错误消息:

Traceback (most recent call last):
  File "C:\path\test.py", line 2, in <module>
    print (", ".join(var))
TypeError: sequence item 0: expected str instance, int found
Run Code Online (Sandbox Code Playgroud)

然而,我希望输出为:

1, 2, 3
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以这样,它将打印所有数字,还有能力增加,所以我可以有任何数量的数字?

python arrays python-3.x

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