दिलचस्प पोस्ट
निलंबित घटना WinRT का प्रयोग नहीं कर रहा है Angularjs: एक पुनरावर्ती निर्देश समझना बचत से पहले WPF डाटाबेस कंटेट करने योग्य डिवा में कैरेट में html डालें java.lang.noclassdeffounderror: com.google.android.gms.R $ शैलीबल किसी सी # प्रोजेक्ट से एक सी # प्रोजेक्ट के साथ क्लास का उपयोग कैसे करें कई पाठ फ़ाइलों को एक में जोड़ना नियमित अभिव्यक्ति मिलान मैं आखिरी बच्चे को छोड़कर एक तत्व के सभी बच्चों का चयन कैसे कर सकता हूं? IE10 SCRIPT5009: '__do पोस्टबैक' अपरिभाषित है एक MySQL सर्वर से एंड्रॉइड ऐप तक कैसे पहुंचे? सीएसएस के साथ IE8 में सक्रिय हाइपरलिंक के आसपास बिंदीदार सीमा को कैसे निकालना अपाचे के लिए यूटीएफ -8 में डिफ़ॉल्ट एन्कोडिंग को कैसे बदलना है? विशिष्ट वस्तुओं के लिए LINQ के साथ काम नहीं कर रहा है Xcode 5 और संपत्ति कैटलॉग: LaunchImage संदर्भ करने के लिए कैसे?

जावा का कलेक्शन। शफ़ल क्या कर रहा है?

हाल ही में मैंने खुद को यह सुनिश्चित करने की जरूरत महसूस की कि मेरी सूची क्रम में नहीं थी सीतनिद्रा में होना काफी अच्छा था इसे सही क्रम में लौटने के लिए बेवकूफ सीतनिद्रा में होना, मेरे दिमाग को नहीं पढ़ना

मैंने अपने जावा एपीआई को देखा और मुझे यह बताता है कि इसकी फेरबदल विधि यह करती है:

यादृच्छिक रूप से यादृच्छिकता के एक डिफ़ॉल्ट स्रोत का उपयोग करके निर्दिष्ट सूची को प्रदर्शित करता है।

उत्सुक जॉर्ज होने के नाते मैं हूं, मुझे यह जानना है कि इसका मतलब क्या है। क्या कोई गणित पाठ्यक्रम है जो मैं यह जानने के लिए ले जाऊं? क्या मैं कोड देख सकता हूं? जावा, आप मेरे ऐरे लिस्ट को क्या कर रहे हैं?!?!?

अधिक विशिष्ट होने के लिए, यहां कौन से गणित की अवधारणाओं का उपयोग किया जा रहा है?

Solutions Collecting From Web of "जावा का कलेक्शन। शफ़ल क्या कर रहा है?"

हाँ, आप कोड को देख सकते हैं; यह मूल रूप से एक फिशर-येट्स फेरबदल करता है यहां यह है (ओपन जेडीके, और ओपन सोर्स के लिए याय: धन्यवाद):

public static void shuffle(List<?> list, Random rnd) { int size = list.size(); if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) { for (int i=size; i>1; i--) swap(list, i-1, rnd.nextInt(i)); } else { Object arr[] = list.toArray(); // Shuffle array for (int i=size; i>1; i--) swap(arr, i-1, rnd.nextInt(i)); // Dump array back into list ListIterator it = list.listIterator(); for (int i=0; i<arr.length; i++) { it.next(); it.set(arr[i]); } } } 

स्वैप विधि:

  private static void swap(Object[] x, int a, int b) { Object t = x[a]; x[a] = x[b]; x[b] = t; } 

संग्रह जावाडाक उपयोग की गई शफ़ल विधि पर कुछ जानकारी देता है।

यह कार्यान्वयन पीछे की ओर सूची में पिछड़ता है, अंतिम तत्व से दूसरे तक, बार-बार "वर्तमान स्थिति" में एक बेतरतीब ढंग से चयनित तत्व को स्वैप करना। तत्वों को बेतरतीब ढंग से सूची के उस हिस्से से चुना जाता है जो पहले तत्व से वर्तमान स्थिति तक चलता है, समावेशी।

तो यह अंत में शुरू होता है और पीछे की सूची चलता है। प्रत्येक तत्व पर यह सूची से पूर्ववर्ती तत्व के साथ मौजूदा तत्व को रोकता है और स्वैप करता है इस मामले में "यादृच्छिकता का डिफ़ॉल्ट स्रोत" शायद एक डिफ़ॉल्ट वस्तु के साथ बनाई गई एक रैंडम ऑब्जेक्ट है