【问题标题】:Frequency of element in linked list [closed]链表中元素的频率[关闭]
【发布时间】:2014-08-29 20:11:33
【问题描述】:

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

     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)

更新了 .请帮帮我。

【问题讨论】:

  • 您需要包含抛出的异常。不仅仅是堆栈跟踪的一部分。
  • 请添加代码和整个堆栈跟踪!
  • 这要么是 LinkedList 实现中的错误,要么是您以错误的方式使用它(例如,来自多个线程 - LinkedList 未同步)。发布MVCE。还有你的 Java 版本。
  • @icza 你说得对,我已经更新了,请检查

标签: java


【解决方案1】:

您正在多个线程中使用您的LinkedListLinkedListjavadoc 明确指出(粗体):

注意这个实现是不同步的。如果多个线程同时访问一个链表,并且至少有一个线程在结构上修改了链表,那么它必须在外部同步。

你的线程名称“吓”我:

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

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

然后Collections.frequency() 尝试使用其迭代器遍历列表,该迭代器在其实现中达到null 值可能是由于LinkedList 已损坏。

不要在没有正确同步的情况下在多个线程中使用LinkedList

【讨论】:

  • 你能给我一些好的方法吗
  • 如前所述和引用:不要在没有正确同步的情况下在多个线程中使用LinkedList
  • 是arraylist会是个不错的选择
  • 请阅读ArrayList的javadoc。它也声明了相同的内容:“不同步”。
  • 我应该使用什么集合?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
相关资源
最近更新 更多