java - 如何在Java中获取链表中元素的所有索引

标签 java linked-list

我有一个链接列表。我想为这个列表的每个位置 i 设置一个权重因子 p^i 。然后我想获得列表元素的加权值作为这些因素的总和。

让我举一个例子来具体说明。假设我的列表大小为 5,即它包含从索引 0 到索引 4 的元素。假设 p = 0.5(即 p = 1/2)。因此,位置 0 的权重因子为 p^0 = 1,位置 1 的权重因子为 p^1 = 0.5,位置 2 的权重因子为 p^2 = 0.25,位置 3 的权重因子为 p^3 = 0.125,最后位置 4 的权重因子为 p^3 = 0.125。 p^4 = 0.0625。

现在假设列表中有以下项目,从位置 0 到位置 4(我给出了这些项目的 ID): 4 | 4 | 5 | 4 | 5. 因此,由于 ID = 4 的项位于位置 0、1、3,因此它的值应该是这些权重因子的总和,即 p^0 + p^1 + p^3 = 1 + 0.5 + 0.125 = 1.625。同样,对于 ID = 5 的项目,我们有 p^2 + p^4 = 0.25 + 0.0625 = 0.3125。

我的问题是:如何获取这些元素(ID 4和ID 5)在列表中所在的所有索引,以便将这些元素的值计算为与这些索引权重因子相关联的总和? indexOf(Object o) 返回列表中指定元素第一次出现的索引,我需要所有出现的索引。有什么建议吗?

编辑:更新为几何递减总和而不是递增

我对我的代码进行了修改,而不是在我的列表(我称之为 window 并采用 Request 类型的对象)中具有几何增加的总和,以具有几何减少的总和。如果我有少量请求(例如 100 - 我在主类的主要方法中设置请求数 - 的入口点,我的代码(我将其发布在这里,与我的程序中完全相同)工作得很好代码)。但是,如果我使用 1000 个请求,则会收到错误:

    java.lang.IllegalArgumentException: n must be positive 

它指的是我的代码中的另一点:

if(reqToBeRemoved == null) {

    reqToBeRemoved = 
minKeyList.get((new Random(System.currentTimeMillis()).nextInt(minKeyList.size())));

} 

这是我的代码,我希望我在这里发布的内容有用(显然我不能在这里发布整个代码,我猜这也不是必需的):

public void doWindowLookup(Request request) {

    int index = 0;
    double sum = 0;
    double initVal = 0;

    for(Request r : window) {

        if(r.equals(request)) {

            if(index == 0) {

                initVal = 1;

            }

            else {

                request.weight = Math.pow(p, index);
                sum += request.weight;

            }

            request.weightedWinFreq = initVal - sum;

        }

        index++;
    }

    logger.info("TEST: Item: " + request.reqID + " has weightedWinFreq: " +
                 request.getWeightedWinFreq());

}

此错误消息意味着什么?哪个一般项 n 应该是正数???我假设当我调用 random.nextInt() 时,我传递了一个零参数(如上一个线程 Exception in thread "main" java.lang.IllegalArgumentException: n must be positive 所示),但是这怎么可能,因为我的参数是 minKeyList.size()?

(如果我的问题需要进一步澄清,请要求我提供所需的信息。)

编辑:关于我的问题的先前更新:这是我在程序的另一部分的错误。考虑回答的问题。

最佳答案

您始终可以手动循环浏览列表:

double weight = 0.0;
Object target = new Integer(4);
int index = 1;
for (Object elem : linkedList) {
    if (elem.equals(target)) {
        weight += Math.pow(p, index);
    }
    index++;
}

关于java - 如何在Java中获取链表中元素的所有索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16149703/

相关文章:

java - 使用 java 修复格式错误的 XML

java - 这本教科书链表是否涉及 "recursive constructor"?

c++ - 使用了可能未初始化的本地指针变量 'node'。 C++

java - 用 try catch 做 while 无限

java - 在 Android 中使用反射是一个糟糕的设计吗?

java - 客户端在浏览器中输入的日期不会保存在 java POJO 中(客户端发送的请求在语法上不正确)

Mysql:获取表中的所有链接行

C++ Segmentation Fault while循环解析链表有序插入条件语句中的Segmentation Fault

c++ - 在链接列表中按升序插入对象

Java Trie 优化