一尘不染

链表中元素的频率

java

我有一个点类型的链接列表,我想计算一个特定点的频率
Code

     LinkedList<Point> refernce = new LinkedList<>();
      Point neworigin = new Point();
public void distancecalculator(char [][]problem ,LinkedList<Point> refernce) {

  //Somewhere in my code
         for(int i = 0; i < 4; i++)
         {

              int a = reference.x + x[i];   // x={ 0 , 0 ,1 , -1}

              int b = reference.y + y[i];    // y ={ 1, -1 , 0 ,0}

              neworigin.x = a;
             neworigin.y = b;
            reference.add(neworigin)
        if(Collections.frequency(refernce, neworigin) < 6)
        {
                   //End the that thread
        }
   else
      {
           solver s = new solver(newproblerm , refernce );

                          som =  new Thread(s);
                          som.start();
       }

}}

错误:

  at java.lang.Thread.run(Unknown Source)
Exception in thread "Thread-742" java.lang.NullPointerException
    at java.util.LinkedList$ListItr.next(Unknown Source)
        at java.util.Collections.frequency(Unknown Source)

已更新。请帮助我。


阅读 151

收藏
2020-12-03

共1个答案

一尘不染

您正在LinkedList多个线程中使用您的线程。该的JavadocLinkedList明确(粗体),指出:

请注意,此实现未同步。 如果多个线程同时访问链表,并且至少一个线程在结构上修改了链表,则必须在外部进行同步。

您的线程名称“吓死了我”:

线程“ Thread- 742 ”中的异常java.lang.NullPointerException

看来您有 很多 (数百个)线程。您LinkedList同时访问,内部状态被破坏的可能性很高。

然后Collections.frequency()尝试使用其迭代器遍历列表,该迭代器null可能由于LinkedList损坏而在其实现中命中了一个值。

LinkedList如果没有正确的同步,请勿使用来自多个线程的。

2020-12-03