كيفية استخدام سلسلة فعالة كمفتاح ضعيف في جافا، أو حل بديل

StackOverflow https://stackoverflow.com//questions/23038912

سؤال

أنا أجرى مشروع في Java الذي يخزن بيانات المستخدم. يمكن للمستخدمين أن تكون عبر الإنترنت، أو حاليا. عندما يكون المستخدمون عبر الإنترنت، يتم تحميل بياناتهم في كائن البيانات لسهولة الوصول، وتفريغها عند تسجيل الخروج.

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

الشيء الوحيد الذي يمكنني التفكير فيه في كيفية تخزينها هو مفتاح سلسلة، والذي يمثل اسم المستخدم المستخدمين. ولكن بسبب كيفية عمل جافا، لا يبدو أن هذا لا يعمل دائما بسبب نظام التخزين المؤقت سلسلة VM.

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

ربما أنا فقط لا أفهم كيف من المفترض أن يتم استخدام ضعف كيفية استخدام ضعف: إذا لم يكن الأمر كذلك، فهذا من المفترض أن يتم استخدام الضعف، فأنا منفتح على قبول الأفكار الأخرى حول كيفية القيام بما أود.

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

المحلول

السبب يتصرف أنه يتم شرحه بشكل غير متوقع في Javadoc لإضعافه في الجملة الأخيرة من هذه الفقرة:

المقصود هذه الفئة في المقام الأول للاستخدام مع الكائنات الرئيسية التي تساوي اختبار طرق هوية الكائن باستخدام المشغل==. مرة واحدة مثل هذا يتم تجاهل المفتاح أنه لا يمكن إعادة إنشاؤه أبدا، لذلك من المستحيل القيام به بحث بهذا المفتاح في وضع ضعيف في بعض الوقت في وقت لاحق ويكون فوجئت بأن إدخاله قد تمت إزالته. هذه الفئة سوف تعمل جيد تماما مع الكائنات الرئيسية التي لا تستند طرقها التساوي عند هوية الكائن، مثل حالات السلسلة. مع هذا القابل لإعادة التوجيه الكائنات الرئيسية، ومع ذلك، الإزالة التلقائية لإدخالات ضعف التي تم تجاهل مفاتيحها قد تكون مربكة.

ما تريد حقا هو الخريطة حيث تتم إزالة الإدخالات عندما تحصل القيم التي تم جمعها من القمامة، بدلا من عندما تحصل المفاتيح على القمامة التي تم جمعها - أي القيم ضعيفة، بدلا من أن تكون المفاتيح ضعيفة. يمكنك العثور على مساعدة في هذه المشكلة على هذا السؤال:

جافا ضعيف خريطة التجزئة - تحتاج إلى إزالة الإدخال بناء على ضعف القيمة، وليس المفتاح

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