小编rai*_*day的帖子

使用自定义比较器在O(n)中创建PriorityQueue

我试图用自定义比较器实现带有Priorityqueue的MST,但是我在O(n)时间内用它构建min-heap时遇到了问题.问题是,Priorityqueue的一个构造函数只允许在O(n)中创建PriorityQueue,但它不会将任何比较器作为参数.我希望它使用我的自定义比较器.这个问题有解决方法吗?PriorityQueue.addAll()将失去使用Min-heap作为MST的目的,因为它是O(nlogn)方法.这是我的代码.

ArrayList <edge>ar=new ArrayList<>(); 
   for(int i=0;i<e;i++)
   {
       int u=ss.nextInt();
       int v=ss.nextInt();
       int w=ss.nextInt();
       ar.add(new edge(u,v,w));
   }
   PriorityQueue <edge>pr=new PriorityQueue<edge>(ar);
Run Code Online (Sandbox Code Playgroud)

我要使用的比较器: -

PriorityQueue <edge>ar=new PriorityQueue(11,new Comparator() {
        @Override
        public int compare(Object o1, Object o2) {
            edge n1=(edge) o1;
            edge n2=(edge) o2;
            if(n1.w<n2.w)
            {
                return -1;
            }
            else if(n1.w==n2.w)
            {
                if((n1.u+n1.v+n1.w)<=(n2.u+n2.v+n2.w))
                {
                    return -1;
                }   
                else
                {
                    return 1;
                }
            }
            else
            {
                return 1;
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

java priority-queue min-heap

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

JPDA MethodEntryEvent导致应用运行非常慢

我正在尝试捕获在任何android应用程序中进行的所有方法调用。为此,我正在使用JDI为该应用程序的每个运行线程注册MethodEntryRequest。我可以成功完成此操作,但是我遇到的问题是该应用程序变得非常非常慢。所以我想知道我在实现中是否做错了什么。我将代码添加到我首先注册ClassPreparedRequest的地方,以捕获应用程序进程对每个类的加载,并在其中将MethodEntryRequest与threadfilter注册到导致该类加载的线程。

 if(!traceMap.keySet().contains(event.thread()))
    {
        EventRequestManager mgr = vm.eventRequestManager();
        MethodEntryRequest menr = mgr.createMethodEntryRequest();
        menr.setSuspendPolicy(EventRequest.SUSPEND_NONE);
        menr.addThreadFilter(event.thread());
        menr.enable();
    }
Run Code Online (Sandbox Code Playgroud)

用于注册ClassPreparedRequest的代码为

    ClassPrepareRequest cpr = mgr.createClassPrepareRequest();        
    cpr.addClassFilter("com.example.*");
    cpr.setSuspendPolicy(EventRequest.SUSPEND_NONE);
    cpr.enable();  
Run Code Online (Sandbox Code Playgroud)

java debugging android jdi jpda

5
推荐指数
0
解决办法
131
查看次数

HashMap 与数组在以下方法中的性能差异

为了解决动态编程问题,我使用了两种方法来存储表条目,一种使用多维数组 ex:tb[m][n][p][q] ,另一种使用哈希图并使用第一种方法的索引来使用字符串作为“m,n,p,q”中的键。但对于一个输入,第一种方法会在 2 分钟内完成,而其他方法则需要 3 分钟以上。如果哈希图和数组的访问时间渐近相等,为什么性能差异如此之大?

java hashmap

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

标签 统计

java ×3

android ×1

debugging ×1

hashmap ×1

jdi ×1

jpda ×1

min-heap ×1

priority-queue ×1