উত্তর:
জাভা সহযোগী অ্যারেগুলিকে সমর্থন করে না, তবে এটি সহজেই একটি ব্যবহার করে অর্জন করা যেতে পারে 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
খালি থাকলে (বেশি) মেমোরি নষ্ট করে না তবে আপনি যদি একটি বৃহত মানচিত্র তৈরি করতে চান তবে আপনি এর আকারের সামনের অংশটি উল্লেখ করে বিভিন্ন অ্যারে-আকারগুলি সংরক্ষণ করতে পারবেন।
জাভাতে পিএইচপি-র মতো সাহসী অ্যারে নেই।
আপনি যা করছেন তার জন্য বিভিন্ন সমাধান রয়েছে যেমন মানচিত্র ব্যবহার করা, তবে আপনি কীভাবে তথ্য সন্ধান করতে চান তার উপর নির্ভর করে। আপনি সহজেই কোনও শ্রেণি লিখতে পারেন যা আপনার সমস্ত তথ্য এবং এগুলির একটি উদাহরণ সংরক্ষণ করে 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
, যা দৃ strongly়ভাবে টাইপ করা আছে তবে কম মার্জিত সিনট্যাক্স / এপিআই রয়েছে।
এটি আপনার উদাহরণের ভিত্তিতে সবচেয়ে কাছের আপনি পেতে পারেন:
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}
জাভাতে সহযোগী অ্যারেগুলি পিএইচপি-র মতো:
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<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, নাম = প্রোড 1}, {আইডি = 0002, নাম = প্রোড 2}]
প্রকৃতপক্ষে জাভা সহযোগী অ্যারেগুলিকে সমর্থন করে তাদের অভিধান বলা হয়!
এ সম্পর্কে আরও চিন্তাভাবনা করে, আমি এই সমস্যার সাথে মোকাবিলা করার আরও সাধারণ-উদ্দেশ্যে উপায় হিসাবে টিপলগুলি ছড়িয়ে দিতে চাই। যদিও টিউপলগুলি জাভার স্থানীয় নয়, আমি জাভাটুপলসটি একই রকম কার্যকারিতা সরবরাহ করতে ব্যবহার করি যা অন্যান্য ভাষায় বিদ্যমান। জিজ্ঞাসা করা প্রশ্নটি কীভাবে মোকাবেলা করা যায় তার একটি উদাহরণ
Map<Pair<Integer, String>, String> arr = new HashMap<Pair<Integer, String>, String>();
Pair p1 = new Pair(0, "name");
arr.put(p1, "demo");
আমি এই পদ্ধতির পছন্দ করি কারণ এটি এপিআই সরবরাহিত ক্লাস এবং পদ্ধতিগুলির সাথে ট্রিপল এবং অন্যান্য উচ্চতর অর্ডারযুক্ত গ্রুপিংগুলিতে প্রসারিত হতে পারে।
পিএইচপি মন্তব্য সম্পর্কে 'না, পিএইচপি এটি পছন্দ করবে না'। প্রকৃতপক্ষে, পিএইচপি চ্যাগিং চালিয়ে যেতে পারে যদি না আপনি কিছু খুব সীমাবদ্ধ (পিএইচপি-র জন্য) ব্যতিক্রম / ত্রুটির স্তর নির্ধারণ করেন (এবং সম্ভবত তখনও না)।
ডিফল্টরূপে যা ঘটবে তা হ'ল অস্তিত্বের চলক / সীমার বাইরে সীমা অ্যালিমেন্টের অ্যাক্সেস আপনার মূল্যকে 'আনসেট' করে দেয় যা আপনি নির্ধারণ করছেন। না, এটি বাতিল নয়। পিএইচপি-র একটি পার্ল / সি বংশ রয়েছে যা আমি বুঝতে পারি। সুতরাং এখানে রয়েছে: আনসেট এবং অ বিদ্যমান বিদ্যমান ভেরিয়েবলগুলি, মানগুলি সেট করা আছে তবে এটি নুল, বুলিয়ান মিথ্যা মান, তারপরে স্ট্যান্ডার্ড ল্যাঙ্গুয়েজের সমস্ত কিছু। তাদের আলাদাভাবে পরীক্ষা করতে হবে, অথবা ফাংশন / সিনট্যাক্সে নির্মিত নিখুঁত মূল্যায়ন চয়ন করতে হবে।
NullPointerException
বাইরের মানচিত্রে প্রবেশের জন্য মানচিত্র না থাকলে এটি নিক্ষেপ করবে0
। পিএইচপি কি আরআর [0] ['নাম'] (আমি এই ভাষাটি মোটেই জানি না) এর সাথে আরও অনুমোদনযোগ্য নয়?