दिलचस्प पोस्ट
PHP में अब () फ़ंक्शन स्प्रिंग एमवीसी 3.1 में रीडायरेक्शन के बाद फ्लैश एट्रिब्यूट्स को कैसे पढ़ें? स्रोत निर्देशिका में एक स्थैतिक पुस्तकालय में लिंक करने के लिए मैं कैसे सीएमके को बताऊँ? कैसे आर में एक स्ट्रिंग रिवर्स SQL सर्वर 2008 एक्सप्रेस में एक ही सर्वर पर SQL सर्वर डेटाबेस क्लोन कैसे कर सकता हूं? एसक्यूएल जोन: उपयोग, या उसमें क्या अंतर है? कैसे करें: कंसोल ऐप (सी #) में तालिका बनाने का सबसे अच्छा तरीका बंद करने की चेतावनी में अग्रविकल्प चर तक पहुंच दो समान वस्तुओं एक दूसरे के बराबर क्यों नहीं हैं? मैं एक regex का उपयोग कर एक स्ट्रिंग में सभी YouTube वीडियो आईडी कैसे प्राप्त करूं? डाटाबेस में भंडारण एरेज़: JSON बनाम क्रमानुसार सरणी Android डिवाइस का प्राथमिक ई-मेल पता कैसे प्राप्त करें एप्लिकेशन की प्रक्रिया को आवेदन ट्रे से हटा दिए जाने के बाद सेवा की प्रक्रिया को मार दिया जाता है ऑब्जेक्ट की एक सरणी को सी # में विशिष्ट फ़ील्ड से कैसे सॉर्ट करना है? विस्तृत से लेकर लंबे स्वरूप तक डेटा.फ्रेम को फिर से स्थानांतरित करना

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

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

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

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

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

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

वेब के समाधान से एकत्रित समाधान "जावा का कलेक्शन। शफ़ल क्या कर रहा है?"

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

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; } 

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

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

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