अद्वितीय आईडी कैसे उत्पन्न करें जो जावा में पूर्णांक है जो अगली संख्या का अनुमान नहीं लगाता है?जावा (इंटीजर) में अनन्य आईडी कैसे उत्पन्न करें?
उत्तर
कैसे अद्वितीय यह होने की जरूरत है?
यदि यह केवल प्रक्रिया के भीतर अद्वितीय है, तो आप AtomicInteger
का उपयोग कर सकते हैं और प्रत्येक बार आपको एक नया मान की आवश्यकता होने पर incrementAndGet()
पर कॉल कर सकते हैं।
+1, इसे पोस्ट करने वाला था। – BalusC
Integer.MIN_VALUE के साथ प्राइम परमाणु इंटेगर के लिए भी बेहतर। यह डिबगिंग में मदद करता है और आपको खेलने के लिए और अधिक संख्या देता है। – reccles
आपको अतिप्रवाह के बारे में भी सोचने की आवश्यकता है। 'अगर (curInt == Integer.MAX_INT) की तरह smth' परमाणु इंटेगर –
बस आईडी उत्पन्न करें और जांचें कि यह पहले से मौजूद है या नहीं, आपकी जेनरेट की गई आईडी की सूची में।
int uniqueId = 0;
int getUniqueId()
{
return uniqueId++;
}
synchronized
जोड़े यदि आप इसे सुरक्षित थ्रेड करना चाहते हैं।
जब यह पूर्णांक बहुत अधिक हो और रोल हो जाए तो अपवाद जोड़ना चाहें। इसके अलावा Integer.MinInt() पर अद्वितीय आईडी शुरू करना चाह सकता है (विधि को ऐसा कुछ कहा जाता है)। – sixtyfootersdude
यह तब तभी काम करेगा जब प्रक्रिया बिना रोक के हमेशा के लिए चलती है। पुनरारंभ किए गए ऐप्स के लिए, यह प्रत्येक बार 0 से शुरू होगा। – talonx
ठीक है, कोई भी पहले स्थान पर इंटेगर की बजाय लांग का उपयोग करने के बारे में सोच सकता है। –
यह एक पूर्णांक नहीं लौटाता है। प्रारूप हेक्सस्ट्रिंग है, जैसे '20e8f3d6-3f8d-475b-8c19-9619a78bbdc8'। – BalusC
@ बालससी: यह केवल स्ट्रिंग आउटपुट है जिसके बारे में आप बात कर रहे हैं। आंतरिक रूप से एक यूयूआईडी 128-बिट मान है और इसलिए इसे पूर्णांक के रूप में समझा जा सकता है (हालांकि BigInteger के बावजूद)। – Adamski
फिर भी, यह एक पूर्णांक में फिट नहीं है। – BalusC
यदि आप कुछ हद तक सीमित हैं तो यह आसान है।
यदि आपके पास एक धागा है, तो आप केवल अद्वितीय आईडी ++ का उपयोग करें; बाहर निकलने पर वर्तमान अद्वितीय आईडी को स्टोर करना सुनिश्चित करें।
यदि आपके पास एकाधिक धागे हैं, तो एक सामान्य सिंक्रनाइज़ जेनर यूनिकिड विधि काम करता है (ऊपर जैसा ही लागू होता है)।
समस्या तब होती है जब आपके पास कई CPUs होते हैं - या तो क्लस्टर में या कुछ पीयर-टू-पीयर गेम जैसे कुछ वितरित सेटअप।
उस स्थिति में, आप आम तौर पर एक ही संख्या बनाने के लिए दो भागों को जोड़ सकते हैं। उदाहरण के लिए, प्रत्येक प्रक्रिया जो एक अद्वितीय आईडी उत्पन्न करती है, उसके पास 2-बाइट आईडी नंबर असाइन किया जा सकता है और उसके बाद इसे एक अद्वितीय आईडी + के साथ संयोजित किया जा सकता है। की तरह कुछ:
return (myID << 16) & uniqueID++
यह "MyID" भाग वितरण मुश्किल हो सकता है, लेकिन वहाँ कुछ तरीके हैं। आप केवल केंद्रीकृत डेटाबेस से एक को पकड़ सकते हैं, एक केंद्रीकृत सर्वर से एक अद्वितीय आईडी का अनुरोध कर सकते हैं ...
यदि आपके पास इंट की बजाय लंबी अवधि है, तो सामान्य चालों में से एक डिवाइस आईडी (यूयूआईडी) लेना है) ETH0 की, जो कि सर्वर के लिए अद्वितीय होने की गारंटी है - फिर बस एक सीरियल नंबर जोड़ें।
तुम सच में नहीं बल्कि पूर्णांक से पूर्णांक मतलब हैं:
Integer id = new Integer(42); // will not == any other Integer
आप अन्य प्रक्रियाओं के लिए या उपयोगकर्ता, लगातार, या अन्य कारणों की मेजबानी के लिए एक JVM के बाहर कुछ दिखाई चाहते हैं, तो वहाँ अन्य तरीके हैं , लेकिन संदर्भ के बिना आप शायद अपने सिस्टम के भीतर ऑब्जेक्ट पहचान की अंतर्निहित विशिष्टता का उपयोग करके बेहतर तरीके से उपयोग कर रहे हैं।
क्या आपको इसकी आवश्यकता है;
- एक ही समय में पर चल रहे दो जेवीएम के बीच अद्वितीय।
- अद्वितीय अगर भी JVM पुनरारंभ किया गया है।
- थ्रेड-सुरक्षित।
- समर्थन शून्य? यदि नहीं, int या long का उपयोग करें।
बिल के। ने पहले मामले के लिए एक समाधान दिया, यानी यदि आईडी 2 जेवीएम के बीच अद्वितीय होना चाहते हैं तो क्या किया जा सकता है। JVM पुनरारंभ होने के बाद भी यह सुनिश्चित करने के लिए सही दृष्टिकोण क्या है कि आईडी अद्वितीय है? – user1071840
ओह, एक केंद्रीकृत डेटाबेस से एक अद्वितीय आईडी का अनुरोध करने के बाद भी पुनरारंभ होगा। – user1071840
import java.util.UUID;
public class IdGenerator {
public static int generateUniqueId() {
UUID idOne = UUID.randomUUID();
String str=""+idOne;
int uid=str.hashCode();
String filterStr=""+uid;
str=filterStr.replaceAll("-", "");
return Integer.parseInt(str);
}
// XXX: replace with java.util.UUID
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
System.out.println(generateUniqueId());
//generateUniqueId();
}
}
}
आशा यह आप में मदद करता है।
-1। जबकि एक यूयूआईडी निश्चित रूप से एक अद्वितीय मूल्य प्रदान करेगा, इस बात की कोई गारंटी नहीं है कि जब आप अपना हैशकोड लेते हैं तो यह विशिष्टता बनी रहती है। आप Integer.MIN_VALUE और Integer.MAX_VALUE के बीच एक यादृच्छिक संख्या चुन सकते हैं और सर्वोत्तम के लिए आशा कर सकते हैं। –
ऐसा नहीं है। UUID.randomUUID() एक क्रिप्टोग्राफिक रूप से मजबूत यादृच्छिक संख्या जेनरेटर का उपयोग करता है, ताकि कमजोर छद्म यादृच्छिक संख्या जनरेटर का उपयोग करने से बेहतर होना चाहिए। –
किसी भी समय अनोखा:
int uniqueId = (int) (System.currentTimeMillis() & 0xfffffff);
[इस उत्तर] का संदर्भ [http://stackoverflow.com/a/2979239/344480), 'System.currentTimeMillis() 'अद्वितीय मान वापस नहीं करता है। – Matthias
- 1. जावास्क्रिप्ट अनन्य ब्राउज़र आईडी
- 2. दो कॉलम पर अनन्य बाधा पोस्ट करें: इंटीजर और बूलियन
- 3. अद्वितीय आईडी उत्पन्न करें
- 4. अनन्य तत्व आईडी, भले ही तत्व में
- 5. शर्करा में मॉड्यूल में अद्वितीय आईडी फ़ील्ड कैसे उत्पन्न करें
- 6. जावा में यादृच्छिक BigInteger मान कैसे उत्पन्न करें?
- 7. जावा में ध्वनि प्रभाव कैसे उत्पन्न करें?
- 8. जावा इंटीजर तुलना:
- 9. सत्र आईडी कैसे उत्पन्न होता है?
- 10. जेएनआई जावा ऑब्जेक्ट (इंटीजर) तक पहुंचने के लिए कैसे करें
- 11. जावा कॉल ग्राफ़ कैसे उत्पन्न करें
- 12. PHP और mySQL (i): यादृच्छिक उपयोगकर्ता आईडी कैसे उत्पन्न करें?
- 13. अनन्य इंडेंटिफायर क्लस्टर्ड इंडेक्स पर नया अनुक्रमिक आईडी
- 14. जावा जेएनएलपी फाइलें उत्पन्न करें?
- 15. अनन्य कुंजी
- 16. "यादृच्छिक" कैसे उत्पन्न करें लेकिन "अद्वितीय" संख्याएं कैसे उत्पन्न करें?
- 17. जावा में किसी भी फाइल के हैश कैसे उत्पन्न करें?
- 18. जावा में बहु-डोमेन (यूसीसी) प्रमाण पत्र कैसे उत्पन्न करें?
- 19. जावा में फ्रीक्वेंसी द्वारा ध्वनि कैसे उत्पन्न करें?
- 20. स्ट्रिंग में इंटीजर को एच में कैसे परिवर्तित करें: selectOneMenu
- 21. इंटीजर स्ट्रिंग्स को कैसे सॉर्ट करें?
- 22. सी # asp.net क्लाइंट आईडी और अनन्य आईडी के बीच कोई अंतर क्यों है?
- 23. इंटीजर में एक नल स्ट्रिंग कास्ट करें
- 24. जावा संग्रह - अनन्य कुंजी और अद्वितीय मान
- 25. सर्वोत्तम तरीका क्या है जब उत्पन्न आईडी
- 26. इंटीजर आईडी प्रकार फ़ील्ड्स का उपयोग कर पॉलिमॉर्फिक असाइनमेंट
- 27. एनएसपी्रेडिकेट इंटीजर
- 28. एसक्यूएल में "अनन्य" क्वेरी कैसे लिखें?
- 29. एक अनन्य इंडेक्स को एक अनन्य इंडेक्स में बदलें
- 30. ऑब्जेक्ट आईडी कैसे मुद्रित करें?
शायद आप अपनी आवश्यकताओं के संदर्भ के बारे में थोड़ा और अधिक सटीक होना चाहिए। – svachon