1. قم بتحويل المصفوفة إلى القائمة ثم استخدمها في القائمة لتحديد ما إذا كانت موجودة
public static boolean uselist (string [] arr ، string containsvalue) {return arrays.aslist (arr) .Contains (inventValue) ؛ }تجدر الإشارة إلى أن القائمة المحولة في المصفوفات. ASLILL ليست java.util.arraylist ولكن java.util.arrays.arrayList. من بينها ، لا يمكن توسيع طول الصفيف. هذا مهم بشكل خاص. يحتوي على التنفيذ على النحو التالي:
يحتوي Overridepublic Boolean على (كائن O) {// call indexof method لتحديد الموضع الذي هو عليه ، وتحديد أنه -1 indexof (o)! = -1 ؛}@OverRidepublic int indexof (object o) {// get element e [] a = th this.a ؛ . } آخر {// إذا لم يكن فارغًا لـ (int i = 0 ؛ i <a.length ؛ i ++) // الحكم على ما إذا كان العنصر مساوياً لـ [i] if (o.equals (a [i])) // return i return i ؛ } // إرجاع إرجاع -1 -1 ؛}2. استخدم مجموعة لتحديد ما إذا كانت موجودة
useet useet static static static (string [] arr ، string containsvalue) {return new hashset <> (arrays.aslist (arr)). }مقارنة مبدأ Array-> list-> set باستخدام SET
رمز المصدر: يتم تنفيذها بواسطة خريطة الاتصال ContentKey ، ويتم تنفيذ HashMap عن طريق اجتياز المفتاح في جدول التجزئة
يحتوي ypublic boolean على (كائن O) {return map.containskey (o) ؛ }3. استخدم الحلقات للتنفيذ ، اكتب حلقة للحكم
public static boolean useloop (string [] arr ، string containsvalue) {// judt ما إذا كان فارغًا إذا (arr == null || arr.length == 0) {return false ؛ } لـ (int i = 0 ؛ i <arr.length ؛ i ++) {// all null if (containvalue! = null && containvalue.equals (arr [i])) {return true ؛ } آخر إذا (arr [i] == null) {return true ؛ }} إرجاع خطأ ؛ }4. استخدم طريقة تحتوي على org.apache.commons.lang3.arrayutils لتنفيذها
use use uletiLs الثابتة العامة (string [] arr ، string containSvalue) {return arrayutils.contains (arr ، invalvalue) ؛ }رمز مصدر التنفيذ المحدد:
يحتوي Boolean الثابت العام (الكائن النهائي [] Array ، Object ObjectTofInd) {// فهرس استدعاء INDEXOF لتحديد فهرس إرجاع الموضع (Array ، ObjectTofInd)! = index_not_found ؛ } index static indexof (الكائن النهائي [] ، كائن نهائي ، كائن نهائي ، int startIndex) {// judge null if (array == null) {return index_not_found ؛ } // judge start position if (startIndex <0) {startIndex = 0 ؛ }. }} // upply ما إذا كان العنصر هو مثيل لعنصر في الصفيف. إذا كان الأمر كذلك ، فإن Loop and Use equals to Judge} if (Array.getClass (). }}} // لم يتم العثور على إرجاع index_not_found ؛ }استخدم دورات 1W للكشف عن الكفاءة
recompileArr static static static (string [] arr ، string containSvalue) {// باستخدام قائمة start = system.nanotime () ؛ لـ (int i = 0 ؛ i <10000 ؛ i ++) {uselist (arr ، invalvalue) ؛ } نهاية طويلة = system.nanotime () ؛ System.out.println ("باستخدام List->"+(end-start)/10000) ؛ // باستخدام set start = system.nanotime () ؛ لـ (int i = 0 ؛ i <10000 ؛ i ++) {useet (arr ، invalvalue) ؛ } end = system.nanotime () ؛ System.out.println ("باستخدام set->"+(نهاية نهاية)/10000) ؛ // باستخدام loop start = system.nanotime () ؛ لـ (int i = 0 ؛ i <10000 ؛ i ++) {useloop (arr ، invalvalue) ؛ } end = system.nanotime () ؛ System.out.println ("باستخدام loop->"+(end-start)/10000) ؛ // باستخدام utils start = system.nanotime () ؛ لـ (int i = 0 ؛ i <10000 ؛ i ++) {useUtils (arr ، invalvalue) ؛ } end = system.nanotime () ؛ System.out.println ("باستخدام utils->"+(نهاية نهاية)/10000) ؛}النتائج كما يلي:
باستخدام القائمة-> 973
باستخدام set-> 2676
باستخدام حلقة-> 448
باستخدام utils-> 1364
إصدار JDK المستخدم هو إصدار JDK1.8.0_172 ، والذي يمكن استنتاجه من ما سبق
الطرق الأربعة المذكورة أعلاه لها كفاءة عالية -> منخفضة
حلقة> قائمة> utils> set
بالمقارنة ، يمكن ملاحظة أن استخدام طريقة الحلقة هو الأكثر فعالية في الحكم. ثم انتقل إلى القائمة ، ثم انتقل إلى Utils ثم انتقل إلى تعيين
تلخيص:
دعونا نحلل أسباب البطء:
الحلقة هي الأسرع ، تعمل مباشرة ، بلا شك
القائمة هي الثانية ، لأنها تحتاج إلى إنشاء java.util.array.arrayList ، إنشاء كائن يستغرق وقتًا ، لذلك سيكون أبطأ.
UTIL ثالثًا ، على الرغم من أنه يستخدم حلقات مماثلة ، Array.getClass (). getComponentType (). isInstance (ObjectToFind) ، يستخدم هذا الكود المكالمة إلى الطريقة الأصلية المحلية. نحن نعلم أن استدعاء الطريقة المحلية الأصلية سيكون أكثر استهلاكًا للوقت من استدعاء طريقة Java مباشرة. علاوة على ذلك ، بالنظر إلى الكود المصدري ، يمكنك أن ترى أن getClass () ، و getComponentType () و Isinstance كلاهما طريقتان أصليتين ، وهما مستهلكان للوقت للغاية.
المجموعة هي الأسوأ ، لأنها تقوم أولاً بتحويل المصفوفة إلى القائمة ، ثم يتم تحويل القائمة إلى تعيين ، وفي المجموعة ، تستخدم HashMap لتنفيذها. لأنه يحول الكائنات عدة مرات ، وبطبيعة الحال ، فإن الكفاءة ليست بالتأكيد أفضل بكثير.
في الواقع ، أنا شخصياً أفضل استخدام ArrayUtils للتشغيل. على الرغم من أن النسبة منخفضة نسبيًا ، هل ستكون أسوأ بكثير؟
ما سبق هو شرح مفصل للعديد من الطرق لمقارنة عناصر حكم الصفيف في جافا في جافا. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!