سؤال

لدي مكلفة إلى حد ما مجموعة حساب (SpectralResponse) التي أود أن تبقي إلى الحد الأدنى.فكنت أفضل طريقة لتخزين عليها واعادتها عند نفس مجموعة هناك حاجة مرة أخرى في المستقبل.يتم اتخاذ القرار باستخدام BasicParameters.

حتى الآن, يمكنني استخدام LinkedList من وجوه عن المصفوفات من SpectralResponse آخر LinkedList عن BasicParameter.و BasicParameters لديه isParamsEqualTo(BasicParameters) طريقة لمقارنة مجموعة المعلمة.

LinkedList<SpectralResponse> responses
LinkedList<BasicParameters> fitParams
LinkedList<Integer> responseNumbers

لذا للبحث ، أنا مجرد الذهاب من خلال قائمة BasicParameters, تحقق من المباراة ، إذا المتطابقة, عودة SpectralResponse.إذا كان أي مباراة ، ثم حساب SpectralResponse.

هنا هو حلقة اعتدت على البحث.

size: LinkedList size, limited to a reasonable value
responseNumber: just another variable to distinguish the SpectralResponse.

    for ( i = size-1; i > 0 ; i--) {
        if (responseNumbers.get(i) == responseNum)
        {
            tempFit = fitParams.get(i);
            if (tempFit.isParamsEqualTo(fit))
            {
                return responses.get(i);
            }
        }
    }

ولكن هذه الطريقة لا تأخذ فقط الكثير من الذاكرة, انها في الواقع أبطأ من مجرد حساب SpectralResponse على التوالي.أبطأ بكثير.

وهذا هو تنفيذ هذا خاطئ أو كنت مخطئا أن precalculating و البحث بشكل أسرع ؟

هل كانت مفيدة؟

المحلول

يتم الوصول إلى LinkedList من مؤشر ، وهذا هو أسوأ طريقة ممكنة للوصول إليه؛)

يجب عليك استخدام ArrayList بدلا من ذلك ، أو استخدام التكرار على جميع القوائم الخاصة بك.

ربما يجب عليك دمج الكائنات الثلاثة في واحد, والاحتفاظ بها في الخريطة مع responseNum الرئيسية.

ويساعد هذا الأمل!

نصائح أخرى

وربما كنت يجب استخدام نوع مجموعة (مجموعة الفعلية، مثل الحشرات، ArrayList)، والقوائم لا المرتبطة. القوائم المرتبطة هو أفضل لكومة أو عملية الانتظار، لا فهرسة (منذ لديك لاجتياز ذلك من طرف واحد). ناقلات هو مجموعة السيارات تغيير حجم، اللي تبونه وأقل النفقات العامة في الحصول على inexes.

ووالحصول على (ط) أساليب قائمة متصلة تتطلب لجلب كل عنصر له إلى أبعد من ذلك والمضي قدما على طول القائمة. النظر في استخدام ArrayList، وطريقة مكرر ()، أو لمجرد مجموعة.

والسطر الثاني، "if (responseNumbers.get(i) == responseNum)" سيكون أيضا غير فعالة كما responseNumbers.get(i) هو عدد صحيح، ويجب أن يكون بدون علبة إلى int (جافا 5 فصاعدا يفعل ذلك تلقائيا؛ والتعليمات البرمجية لا ترجمة على جافا 1.4 أو قبل ذلك إذا responseNum هو أعلن باعتبارها عدد صحيح). انظر هذا للحصول على مزيد من المعلومات حول الملاكمة.

لإزالة هذا الحمل أونبوإكسينغ، استخدم <لأ href = "http://commons.apache.org/primitives/api-release/org/apache/commons/collections/primitives/IntList.html" يختلط = "نوفولو noreferrer "> IntList من المكتبة البدائيون اباتشي. تحتوي هذه المكتبة على المجموعات التي تقوم بتخزين الأشياء الأساسية ([إينتس] في قضيتك)، ومجموعة بدائية (الباحث على سبيل المثال []) بدلا من صفيف كائن. وهذا يعني لا يلزم الملاكمة وسائل للIntList في العودة أنواع بدائية، وليس الأعداد الصحيحة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top