總結物件屬性拷貝的方法及效率比較(一)

2021-08-21 18:22:13 字數 1287 閱讀 6844

針對不同型別的物件,但有相同名稱的屬性,物件屬性拷貝方法:

1)org.apache.commons.beanutils.beanutils屬性拷貝的本質使用反射。

2)org.springframework.beans.beanutils屬性拷貝本質使用反射。

3)自己寫的反射進行物件複製。

4)直接使用get、set方法複製。

5)cglib的beancopier。

效率對比:

屬性拷貝方式

次數apachebeanutilscopyservice

總耗時單次耗時

14.3

1.67

0.398

0.0969

0.04029

0.018037

0.0152364

springbeanutilscopyservice

總耗時單次耗時

23.9

2.22

0.503

0.0434

0.00340

0.000427

0.0002257

selfreflectcopyservice

總耗時單次耗時

0.10.09

0.062

0.0190

0.00428

0.002377

0.0026648

selfgetsetcopyservice

總耗時單次耗時

0.001

0.0002

0.00012

0.000022

0.0000109

cglibbeancopyservice

總耗時單次耗時

14.2

1.28

0.179

0.0195

0.00297

0.000475

0.0001856

這麼看自己通過get/set方法(selfgetsetcopyservice)拷貝物件效率是最高的,但是開發效率比較低,因為相當於為具體的物件寫的定製方法,不通用是硬傷。

如果不想手寫那麼多的get/set,推薦使用spring的beanutils.copyproperteis方法或者cglib的beancopier,效率不錯。

效率最低的是common包裡的beanutils.copyproperteis方法。

現有工具類中物件屬性拷貝都是淺拷貝,意味著引用型別的屬性值的變更會引起其他物件值的變更。

關聯**:

apache和spring的底層都是用的反射。cglib是修改位元組碼。

window物件的屬性及方法

1.自定義函式 有參函式和無參函式 function 函式名 引數1,引數2,引數3 2.呼叫函式 事件名 函式名 3.匿名函式沒有函式名 4.變數的作用域 根據變數作用範圍不同,可分為全域性變數和區域性變數 5.window物件是整個bom的核心 6.bom可實現的功能 彈出新的瀏覽器視窗 移動 ...

js 陣列 物件深度拷貝及方法的注意點

對陣列 物件進行深度拷貝的方法function deepclone data,newdata else object.keys data foreach k else return newdata 其他拷貝方法 使用json方法的存在的問題 物件的方法和值為new date 的資料,轉換之後會改變資...

在程式中引用物件的屬性及方法

在程式中引用物件的屬性及方法 通過在物件及其屬性或者方法之間加上句點 即可以引用物件的屬性及方法。例 讀取 畫板1 物件的 畫筆粗細 屬性 例 修改 畫板1 物件的 畫筆粗細 屬性 例 呼叫 畫板1 物件的 畫直線 方法 舉例下面舉例說明一步步建立顯示 祖國,您好 資訊的易程式。建立易應用程式有三個...