जवाबों:
जावा साहचर्य सरणियों का समर्थन नहीं करता है, हालाँकि इसे आसानी से प्राप्त किया जा सकता है Map
। उदाहरण के लिए,
Map<String, String> map = new HashMap<String, String>();
map.put("name", "demo");
map.put("fname", "fdemo");
// etc
map.get("name"); // returns "demo"
आपके उदाहरण के लिए और भी सटीक (चूंकि आप स्ट्रिंग को किसी भी वस्तु से बदल सकते हैं जो आपकी आवश्यकताओं को पूरा करता है) घोषित करना होगा:
List<Map<String, String>> data = new ArrayList<>();
data.add(0, map);
data.get(0).get("name");
ArrayList
लगभग सभी मामलों में पसंद करूंगा । लेकिन यह एक और चर्चा है।
HashMap
, और निश्चित रूप से व्यवहार के बेंचमार्किंग के बिना और आपके उपयोग के मामले के लिए बेहतर लोड-फैक्टर खोजने के बिना नहीं होना चाहिए । प्रारंभिक आकार निर्दिष्ट करने का एकमात्र कारण यदि आप पहले से जानते हैं कि मानचित्र बहुत बड़ा होगा। HashMap
खाली होने पर (बहुत) मेमोरी बर्बाद नहीं करता है, लेकिन यदि आप एक बड़ा नक्शा बनाने का इरादा रखते हैं, तो आप कई सरणी-आकार को सहेज कर यह निर्दिष्ट कर सकते हैं कि यह सामने का आकार है।
Java में PHP की तरह साहचर्य सरणियाँ नहीं हैं।
आप जो कर रहे हैं उसके लिए विभिन्न समाधान हैं, जैसे कि एक मानचित्र का उपयोग करना, लेकिन यह इस बात पर निर्भर करता है कि आप जानकारी कैसे देखना चाहते हैं। आप आसानी से एक वर्ग लिख सकते हैं जो आपकी सभी जानकारी रखता है और उनमें से उदाहरणों को संग्रहीत करता है ArrayList
।
public class Foo{
public String name, fname;
public Foo(String name, String fname){
this.name = name;
this.fname = fname;
}
}
और तब...
List<Foo> foos = new ArrayList<Foo>();
foos.add(new Foo("demo","fdemo"));
foos.add(new Foo("test","fname"));
तो आप उन्हें पसंद कर सकते हैं ...
foos.get(0).name;
=> "demo"
आप इसे मैप्स के माध्यम से पूरा कर सकते हैं। कुछ इस तरह
Map<String, String>[] arr = new HashMap<String, String>[2]();
arr[0].put("name", "demo");
लेकिन जैसा कि आप जावा का उपयोग करना शुरू करते हैं मुझे यकीन है कि आप पाएंगे कि यदि आप एक वर्ग / मॉडल बनाते हैं जो आपके डेटा का प्रतिनिधित्व करता है तो आपके सबसे अच्छे विकल्प होंगे। मुझे क्या करना होगा
class Person{
String name;
String fname;
}
List<Person> people = new ArrayList<Person>();
Person p = new Person();
p.name = "demo";
p.fname = "fdemo";
people.add(p);
जावा में साहचर्य सरणी जैसी कोई चीज नहीं है। इसका निकटतम रिश्तेदार एक है Map
, जो दृढ़ता से टाइप किया गया है, हालांकि कम सुरुचिपूर्ण वाक्यविन्यास / एपीआई है।
यह निकटतम है जो आप अपने उदाहरण के आधार पर प्राप्त कर सकते हैं:
Map<Integer, Map<String, String>> arr =
org.apache.commons.collections.map.LazyMap.decorate(
new HashMap(), new InstantiateFactory(HashMap.class));
//$arr[0]['name'] = 'demo';
arr.get(0).put("name", "demo");
System.out.println(arr.get(0).get("name"));
System.out.println(arr.get(1).get("name")); //yields null
LazyMap.decorate
और InstantiateFactory
और सामान के लिए?
को देखो मानचित्र इंटरफ़ेस, और ठोस वर्ग में HashMap ।
एक नक्शा बनाने के लिए:
Map<String, String> assoc = new HashMap<String, String>();
एक कुंजी-मूल्य जोड़ी जोड़ने के लिए:
assoc.put("name", "demo");
एक कुंजी के साथ जुड़े मूल्य को पुनः प्राप्त करने के लिए:
assoc.get("name")
और निश्चित रूप से, आप मैप्स की एक सरणी बना सकते हैं, जैसा कि लगता है कि आप क्या चाहते हैं:
Map<String, String>[] assoc = ...
वैसे मैं भी साहचर्य सरणी की तलाश में था और सबसे अच्छे समाधान के रूप में मानचित्रों की सूची पाया।
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class testHashes {
public static void main(String args[]){
Map<String,String> myMap1 = new HashMap<String, String>();
List<Map<String , String>> myMap = new ArrayList<Map<String,String>>();
myMap1.put("URL", "Val0");
myMap1.put("CRC", "Vla1");
myMap1.put("SIZE", "Vla2");
myMap1.put("PROGRESS", "Vla2");
myMap.add(0,myMap1);
myMap.add(1,myMap1);
for (Map<String, String> map : myMap) {
System.out.println(map.get("URL"));
}
//System.out.println(myMap);
}
}
HashMap<Integer, HashMap<String, String>> hash;
जावा में साहचर्य सरणियाँ नहीं हैं, निकटतम चीज़ जो आप प्राप्त कर सकते हैं वह है मैप इंटरफ़ेस
यहाँ उस पेज से एक नमूना है।
import java.util.*;
public class Freq {
public static void main(String[] args) {
Map<String, Integer> m = new HashMap<String, Integer>();
// Initialize frequency table from command line
for (String a : args) {
Integer freq = m.get(a);
m.put(a, (freq == null) ? 1 : freq + 1);
}
System.out.println(m.size() + " distinct words:");
System.out.println(m);
}
}
यदि साथ चलाया जाए:
java Freq if it is to be it is up to me to delegate
आपको मिलेगा:
8 distinct words:
{to=3, delegate=1, be=1, it=2, up=1, if=1, me=1, is=2}
जावा में सहयोगी सरणियाँ जैसे PHP:
SlotMap hmap = new SlotHashMap();
String key = "k01";
String value = "123456";
// Add key value
hmap.put( key, value );
// check if key exists key value
if ( hmap.containsKey(key)) {
//.....
}
// loop over hmap
Set mapkeys = hmap.keySet();
for ( Iterator iterator = mapkeys.iterator(); iterator.hasNext();) {
String key = (String) iterator.next();
String value = hmap.get(key);
}
अधिक जानकारी के लिए, क्लास सॉफ्टहैश मैप देखें: https://shiro.apache.org/static/1.2.2/apidocs/org/apache/shiro/util/SoftHashMap.html
ArrayList <मानचित्र <स्ट्रिंग, स्ट्रिंग>> का उपयोग करें
यहाँ एक कोड नमूना:
ArrayList<Map<String, String>> products = new ArrayList<Map<String, String>>();
while (iterator.hasNext()) {
Map<String, String> product = new HashMap<String, String>();
Element currentProduct = iterator.next();
product.put("id",currentProduct.get("id"));
product.put("name" , currentProduct.get("name") );
products.add(product );
}
System.out.println("products : " + products);
आउटपुट:
उत्पादों: [{आईडी = 0001, नाम = prod1}, {आईडी = 0002, नाम = prod2}]
वास्तव में जावा साहचर्य सरणियों का समर्थन करता है जिसे वे शब्दकोष कहते हैं!
इसके बारे में अधिक सोचकर, मैं इस समस्या से निपटने के लिए एक अधिक सामान्य उद्देश्य के रूप में ट्यूपल्स को बाहर निकालना चाहूंगा। जबकि ट्यूपल्स जावा के मूल निवासी नहीं हैं, मैं जावुतुपल्स का उपयोग मुझे वही कार्यक्षमता प्रदान करने के लिए करता हूं जो अन्य भाषाओं में मौजूद होगी। पूछे गए प्रश्न से कैसे निपटना है, इसका एक उदाहरण है
Map<Pair<Integer, String>, String> arr = new HashMap<Pair<Integer, String>, String>();
Pair p1 = new Pair(0, "name");
arr.put(p1, "demo");
मुझे यह दृष्टिकोण पसंद है क्योंकि इसे ट्राइ और अन्य उच्चतर ऑर्डर किए गए समूहों को एपीआई प्रदान की गई कक्षाओं और विधियों के साथ बढ़ाया जा सकता है।
PHP टिप्पणी के बारे में 'नहीं, PHP इसे पसंद नहीं करेगा'। दरअसल, जब तक आप कुछ बहुत ही प्रतिबंधात्मक (PHP के लिए) अपवाद / त्रुटि स्तरों (और शायद तब भी नहीं) निर्धारित करते हैं, तब तक PHP ठगता रहेगा।
डिफ़ॉल्ट रूप से क्या होगा कि एक गैर मौजूदा वैरिएबल / आउट ऑफ बाउंड्स एरेस एलीमेंट में आपकी वैल्यू 'अनसेट' हो जाती है जिसे आप असाइन कर रहे हैं। नहीं, यह शून्य नहीं है। PHP में एक पर्ल / सी वंश है, जो मैं समझता हूं। तो वहाँ हैं: परेशान और गैर मौजूदा चर, मान जो निर्धारित किए गए हैं लेकिन NULL, बूलियन गलत मान हैं, तो बाकी सब कुछ जो मानक लैंग्वेज हैं। आपको उन लोगों के लिए अलग से परीक्षण करना होगा, या फ़ंक्शन / सिंटैक्स में निर्मित राइट मूल्यांकन का चयन करना होगा।
NullPointerException
यदि बाहरी मानचित्र में प्रवेश के लिए नक्शा नहीं है0
। क्या $ गिरफ्तार [0] ['नाम'] के साथ PHP अधिक अनुमेय नहीं है (मैं इस भाषा को बिल्कुल नहीं जानता)?