2017-06-01 44 views
-1

我必須比較兩個類實例的內容:不完整,但某些字段。這些課程並不相同;這兩個類都有不同的成員元素。在Java中比較兩個不同對象/類實例內容的有效方法是什麼?

例子:

Class Apple 
{ 
    String a; 
    String b; 
    Object c; 
    Object d; 
    Object e; 
} 

Class Orange 
{ 
String x; 
String y; 
String z; 
Object p; 
Object q; 
} 

我想,在P類字符串的值來比較字符串的值在蘋果的「a」。

比較內容的低效方法是使用getter方法,直到達到感興趣的值。

在多個領域和多次進行此類比較的有效方式是什麼?

+1

爲什麼效率低下?什麼是班級? – ElDuderino

+0

如果你知道感興趣的價值,爲什麼你不能直接比較這些價值呢? –

+0

你的意思是「橙」而不是「p」類屬性「p」? –

回答

0

如果您的獲得者只是簡單地返回這些字段的值,那麼他們通常會內聯。如果發生這種情況,那麼你認爲效率低下的比較方法效率可能會很高。你有沒有證據證明這些比較是真的是性能瓶頸?你有沒有分析你的代碼?如果沒有,你很有可能嘗試優化的東西並不重要,這將是無用功

然而,如果這還不夠好,你可以只添加一個測試你感興趣的領域自定義比較方法。;例如

public boolean myEquals(MyType other) { 
    return this.field1.equals(other.field1) && this.field2 == other.field2; 
} 

進一步優化思路:

  1. 比較在你測試是最有可能成爲第一個不同領域的訂單字段。
  2. 如果將對象與自身進行比較可能會頻繁發生,請考慮使用this == other作爲短路。
  3. 如果對象可能會被重複測試,並且任何給定比較的結果可能都是錯誤的,請考慮添加一個字段來爲(僅)正在測試的字段保存定製哈希字段,並將其用作加速器。

但請注意,上述想法僅在特定使用情況下提高平均性能。在其他地方,他們可能使表現更糟糕。


1 - JIT編譯器將不會內聯調用太大,或者需要調度方法;即用C++術語來說的「虛擬」函數調用。

相關問題