为什么Java运行速度比c++;在;是否从已排序列表中删除重复项;? 这是一个来自LeEcDebug的问题。程序很简单。但是我很困惑为什么java运行的速度比C++具有相同的逻辑速度快? Java代码: public ListNode deleteDuplicates(ListNode head) { if (head == null || head.next == null) return head; ListNode runner = head; while (runner.next != null) { if (runner.val == runner.next.val) { // duplicate values, make the next as next.next runner.next = runner.next.next; } else { // otherwise, advance runner to runner.next runner = runner.next; } } return head; }
C++代码:为什么Java运行速度比c++;在;是否从已排序列表中删除重复项;? 这是一个来自LeEcDebug的问题。程序很简单。但是我很困惑为什么java运行的速度比C++具有相同的逻辑速度快? Java代码: public ListNode deleteDuplicates(ListNode head) { if (head == null || head.next == null) return head; ListNode runner = head; while (runner.next != null) { if (runner.val == runner.next.val) { // duplicate values, make the next as next.next runner.next = runner.next.next; } else { // otherwise, advance runner to runner.next runner = runner.next; } } return head; },java,c++,performance,Java,C++,Performance,C++代码: ListNode* deleteDuplicates(ListNode* head) { if(head == NULL || head->next == NULL){ return head; } ListNode* index = head; while(index->next != NULL){ if(index->val == index->next->val){
ListNode* deleteDuplicates(ListNode* head) {
if(head == NULL || head->next == NULL){
return head;
}
ListNode* index = head;
while(index->next != NULL){
if(index->val == index->next->val){
index->next = index->next->next;
}else{
index = index->next;
}
}
return head;
}
Java成本为1ms:
C++需要12毫秒:我不相信一个基准测试运行不到几秒钟 注意:java的动态编译器通常比C++更能去除死代码即未使用的代码。我会确保你的测试是真正的工作,而不仅仅是被丢弃
简而言之,Java对于没有任何用处的基准测试通常更快。LeetCode似乎对每种语言的算法执行时间进行了不同的测量,例如。val的类型是什么?在java中,你只需复制一个引用,以引用代码> Val< /Cord>。C++中,你复制整个对象。这可能是运行时差异的关键。我们不知道使用了什么编译器,是否使用了优化,实际代码是什么(只有片段),没有测试数据,什么都没有。我们只有一个名为“leetcode”的链接和它们的声明。你确定
runner.val==runner.next.val
真的能满足你在Java中的期望吗?它比较的是引用,而不是它们的值。val只是int。很抱歉,我无法获得Leetcode的测试用例和编译器细节。如果看不到这些基准的推导方式,很难将其赋予意义。(不,注册leetcode不是为了查看代码)