স্কুলগুলি তালিকার উপরে অ্যারে পড়ায় কেন? [বন্ধ]


36

প্রাথমিক প্রোগ্রামিং ক্লাসের জন্য আমার স্কুলে বেশিরভাগ অ্যাসাইনমেন্টের জন্য আমাকে অ্যারে ব্যবহার করা প্রয়োজন। আমি এখন পুরো সময় কাজ করি এবং আমি যে প্রকল্পে কাজ করেছি তার জন্য আমি কোনও অ্যারে ব্যবহার করি না। এমনকি বিদ্যমান প্রকল্পগুলিতে আমি আর কোথাও অ্যারে ব্যবহার করতে দেখিনি। আমার মতে, তালিকাটি ব্যবহার করা সহজ এবং এটি একটি মান। অধ্যাপকরা শিক্ষার্থীদের তাদের কার্যভারে অ্যারে ব্যবহার করতে বলছেন কেন? শিক্ষার্থীরা কি বেসিকগুলি বোঝে তাই এটি কি?

যেহেতু বেশিরভাগ বিশ্ববিদ্যালয় জাভা পড়ায়, তাই এই প্রশ্নটি জাভা সম্পর্কিত।


7
অ্যারেগুলি আরও মৌলিক।
ব্যবহারকারী 253751

মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
বিশ্ব প্রকৌশলী

উত্তর:


120

কারণ অ্যারেগুলি ইনডেক্সিং এবং গণ্ডির মতো ধারণাগুলি শেখায়, কম্পিউটার প্রোগ্রামিংয়ের ক্ষেত্রে দুটি মূল ধারণা important

তালিকা কোনও "মানক" নয় " বিভিন্ন ধরণের সমস্যার জায়গাগুলি রয়েছে যার জন্য অ্যারেগুলি উপযুক্ত ফিট।


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
বিশ্ব প্রকৌশলী

48

তারা সম্ভবত ডেটা স্ট্রাকচার দিয়ে শুরু করতে চেয়েছিলেন যা কোনও কম্পিউটার কীভাবে কাজ করে তা সুনির্দিষ্টভাবে উপস্থাপন করে, সুতরাং তারা তালিকার মতো উচ্চ-স্তরের বিমূর্তিগুলি চালু করার আগে আপনি মৌলিকগুলির সাথে পরিচিত হন যা এর সাথে কাজ করা আরও সহজ করে তোলে। অন্যথায় আপনার বোঝার কোনও উপায় নেই যে নির্দিষ্ট কিছু কাঠামো বা অ্যালগরিদম কিছু ক্রিয়াকলাপের জন্য ধীর / দ্রুত এবং অন্যদের জন্য নয়; যদি কম্পিউটার মেমরিটি আসলে লিঙ্কযুক্ত তালিকার বাইরে তৈরি করা হত তবে বিশ্বের খুব আলাদা জায়গা হবে।

একই কারণে, কলেজে আমার প্রথম প্রোগ্রামিং ক্লাসটি সিতে ছিল এবং বাকী ক্লাসগুলি সমস্তই সি ++, জাভা এবং অন্যান্য ভাষায় ছিল। এটি এমন নয় যে সি কোনওরকম ভাল বা সহজ, এটি সি (এবং অ্যারে) আপনার কাছ থেকে কিছুই লুকায় না।


7
রিয়েল কোডে একটি তালিকা কাজ করা সহজ, তবে একটি অ্যারে (সম্পূর্ণ) বোঝা সহজ, এবং এটি জাভাল এবং সার্বজনীন, যেহেতু (জাভা) তালিকাটি নয়, তাই বোঝা আরও গুরুত্বপূর্ণ। অন্তত আমার মতামত।
Ixrec

21
একটি কাজ যা আপনি একটি অ্যারের মধ্যে কাপড় সংরক্ষণ এবং পরে এটি অ্যাক্সেস একটি ডাটা স্ট্রাকচার নিয়োগ হয় । আপনি ঠিক এটি বুঝতে পারেন না। আপনাকে নিজেকে জিজ্ঞাসা করতে হবে, আরও ভাল প্রকৌশলী কী উত্পাদন করে, বেসিক গণনা মডেলগুলি বোঝে বা কোনও ভাষার স্ট্যান্ডার্ড লাইব্রেরি শিখতে পারে? সাধারণ কনসেনসাস (এবং আমি সম্মতি জানাতে পারি) হ'ল আপনি গণনার প্রাথমিক বিষয়গুলি না বুঝে লাইব্রেরির অনেকগুলি বিষয়বস্তু বুঝতে পারবেন না।
কেন্ট এ।

12
লিংকডলিস্ট, অ্যারেলিস্ট, অর্ডারলিস্ট ইত্যাদি আপনার প্রথমে কোন তালিকাটি শিখতে হবে? আপনি যদি বুঝতে না পারেন যে তারা কেন প্রথম স্থানে রয়েছে তবে তারা আপনার জন্য কী করে তা আপনি কীভাবে প্রশংসা করবেন?
কেন্ট এ।

10
@ কেন্টএন্ডারসন থেকে +1। স্কুলগুলিকে এমন ইঞ্জিনিয়ার তৈরি করতে হবে যারা নিম্ন স্তরে ডেটা স্ট্রাকচার বুঝতে পারে; আদর্শভাবে, উত্পাদনকারী প্রকৌশলী যারা সিতে সহজেই মৌলিক কাঠামো বাস্তবায়ন করতে পারে অন্য কোনও প্রোগ্রাম নিছক একটি জাভাস্কুল।
খ্রিস্টান উইলম্যান

2
"তারা সম্ভবত ডেটা স্ট্রাকচার দিয়ে শুরু করতে চেয়েছিল যা কোনও কম্পিউটার কীভাবে কাজ করে তা সুনির্দিষ্টভাবে উপস্থাপন করে" - সুতরাং, তালিকা-কাঠামোগত বা অবজেক্ট-স্ট্রাকচার্ড মেমরিযুক্ত কম্পিউটারগুলির কী হবে? "এটি এমন নয় যে সি কোনওরকম ভাল বা সহজ, এটি সি (এবং অ্যারে) আপনার কাছ থেকে কিছুই লুকায় না।" - যদি না আপনার কম্পিউটারে AS / 400 এর মতো পয়েন্টার না থাকে, যেখানে সি মূলত কোনও ভিএম-তে চলে এবং আপনার জন্য সবকিছুই লুকিয়ে রাখে ।
Jörg ডব্লু মিট্টাগ

21

উপরের উত্তরগুলি দুর্দান্ত, তবে আমার মনে অন্য একটি আছে। জাভা main()পদ্ধতির মানে হল যে শিক্ষার্থীরা ক্লাসের প্রথম দিন হিসাবে প্রায়শই শীঘ্রই বুনিয়াদি অ্যারেগুলির মুখোমুখি হয়। কেন?

public static void main(String[] args)

হ্যালো ওয়ার্ল্ড এবং এর বাইরেও এটি আপনাকে প্রথম জিনিসটি মোকাবেলা করতে হবে। (আমি দেখেছি কিছু কোর্স প্রথমে ব্লুজে এর মতো আইডিইগুলি শেখানোর জন্য ব্যবহার করেছে, যা আপনাকে স্বেচ্ছাসেবী পদ্ধতি চালানোর জন্য পয়েন্ট-ও-ক্লিক করতে দেয় তবে আমরা সেগুলি সরিয়ে রাখব ...) যদিও এটি কিছুটির উপর হ্যান্ডওয়েভ করা সার্থক হতে পারে While এই কীওয়ার্ডগুলি কিছুক্ষণের জন্য, অচিরেই বা পরে বেশিরভাগ শিক্ষক তাদের ব্যাখ্যা করতে চাইবেন। প্রকৃতপক্ষে, একটি ক্লাসিক শিক্ষানবিস-স্তরের পরীক্ষার প্রশ্নটি হল শিক্ষার্থীদের একটি বেসিক হ্যালো ওয়ার্ল্ড প্রোগ্রামের প্রতিটি কীওয়ার্ডটির অর্থ দিতে বলে। এবং আমাদের মূল পদ্ধতির স্বাক্ষরের অংশ হিসাবে আমরা কী খুঁজে পাই? একটি অ্যারে (তার কারণটি, আংশিকভাবে, historicalতিহাসিক। জাভা 1.0 এ অ্যারেলিস্ট বিদ্যমান ছিল না)। অ্যারেগুলি জ্ঞানের সেই প্রাথমিক সেটগুলির অংশ of তালিকা নেই।

এটি বলেছিল, ক্লাসগুলির জন্য অ্যারেলিস্টকে কোর্সের পরে একটু পরে পরিচয় করানো অস্বাভাবিক নয়, বিশেষত একবার যখন বস্তু এবং সেগুলির ব্যবহার coveredেকে দেওয়া হয়। এমনকি জাভা সম্পর্কিত এপি কম্পিউটার বিজ্ঞান পাঠ্যক্রমের মধ্যে অ্যারেলিস্ট অন্তর্ভুক্ত রয়েছে (আমি জানি এটি আগেও ব্যবহৃত হয়েছিল, এবং গুগল ইঙ্গিত করে যে এটি এখনও করছে) যদিও এটি অ্যারেলিস্ট তালিকা এবং বাকী সংগ্রহের ফ্রেমওয়ার্কটি প্রয়োগ করে এই বিষয়টিকে উপেক্ষা করে।

পরিশেষে, এটি আমার অভিজ্ঞতা যে বিশ্ববিদ্যালয়ের সিএস প্রোগ্রামগুলি জাভা কীভাবে উন্নত জাভা বিকাশকারী হতে যায় তা শিক্ষার্থীদের শেখানোর চেয়ে সিএস এবং প্রোগ্রামিং ধারণাগুলি অন্বেষণ করার উপায় হিসাবে ব্যবহার করে। কিছু প্রোগ্রাম পেশাদার বিকাশকারীদের মন্থনে আরও বেশি মনোনিবেশ করতে পারে অন্যরা তত্ত্বের প্রতি বেশি মনোযোগ দেয় তবে উভয় ক্ষেত্রেই কীভাবে জাভা ব্যবহার করতে হয় তা বাস্তব পেশাগত কাজের ক্ষেত্রে শিখতে হবে যা বেশিরভাগ কলেজের পাঠ্যক্রমে শেখানো হবে না। এটি কার্যকরী জাভা-এর মতো নকশার ধরণ এবং কৌশলগুলি থেকে শুরু করে স্প্রিং, হাইবারনেট বা JUnit এর মতো ফ্রেমওয়ার্ক বা জেএসপি বা জেডিবিসির মতো আরও সাধারণ জিনিসগুলির মধ্যে রয়েছে। সেই দর্শনের কথা মাথায় রেখে, সর্বাধিক ব্যবহৃত অ্যারেলিস্টের উপরে অ্যারেগুলিকে জোর দেওয়া আরও কিছুটা অর্থবোধ করে।


3
নিশ্চিত করুন এটি অ্যারে সম্পর্কে আমার বক্তব্যের সাথে কেবল প্রাসঙ্গিক ছিল না, তাই আমি এটিকে বাদ দিয়েছি। আমি System.out.println ("হ্যালো ওয়ার্ল্ড!" )ও অন্তর্ভুক্ত করি নি; পারেন।
জ্যাচ লিপটন

"বাস্তব বিশ্বের" জন্য কৌশলগুলি বনাম কার্যকর কৌশলগুলির জন্য +1। কেউই সংস্করণ নিয়ন্ত্রণের শিক্ষা দিচ্ছিল না, আমি স্কুলে পড়ার সময় কমপক্ষে নয় - তবে আমি প্রাচীন :)
ডেভিড

আমি একটি অপারেটিং সিস্টেমের ক্লাস নিয়েছি যেখানে আমাদের শিডিয়ুলারের মতো বিভিন্ন টুকরা প্রয়োগ করতে হয়েছিল; আমরা একটি সময়ে (একচেটিয়া) এ জাতীয় একটি টুকরোটির দিকে মনোনিবেশ করেছি কারণ সেই সময়ে আমরা বেশি কিছু করতে সক্ষম ছিলাম না । কিন্তু সেই সমস্ত টুকরোগুলি একই সাথে কাজ করার চেষ্টা করার বিষয়ে চিন্তাভাবনা হ'ল আমাকে "প্রারম্ভিকভাবে" "বাস্তব বিশ্বের" বিকাশ / "বৃহত্তর প্রোগ্রামিং" এর জটিলতার একটি প্রশংসা উপহার দিয়েছিল।
ডেভিড

14

প্রথম বর্ষের প্রোগ্রামিং ক্লাসগুলি অ্যারে ব্যবহার করার একটি কারণ হ'ল উত্তরাধিকার: হ'ল ডায়নামিক তালিকাগুলি সহ স্ট্যান্ডার্ড লাইব্রেরিগুলি ব্যবহার করা শুরু করার আগে অধ্যাপকরা মূলত এটি শিখেছিলেন im আদিম তথ্য প্রকারগুলি আরও সাধারণভাবে প্রযোজ্য: কোনও কম্পিউটারে অ্যারে বিদ্যমান রয়েছে সূর্যের নীচে ভাষা (এবং একাধিক সমাবেশের নির্দেশাবলীতে প্রয়োগ করা যেতে পারে)। আমি যখন প্রথম প্রোগ্রামিং শিখছিলাম, তখন একটি লিঙ্কযুক্ত তালিকা কার্যকর করা একটি কার্যভার ছিল।

প্রথম-নীতিগুলি থেকে শুরু করা এবং তারপরে বলা "এটিই মূল কাঠামো say এই ভাষাটি (বা এর গ্রন্থাগারগুলি) আপনাকে এই উচ্চ-স্তরের ডেটা স্ট্রাকচার দেয় যা সমস্ত কিছু করে, তবে আপনাকে x, y এবং z দেয়" এটি বলতে হয় "সুতরাং এটি এই উচ্চ-স্তরের ডেটা স্ট্রাকচার, এখন হুডের নীচে যা রয়েছে তা এখানে" " লিংকডলিস্ট বনাম একটি অ্যারেলিস্ট (বা একটি হ্যাশসেট বনাম একটি ট্রিসেট) ব্যবহার করা যায় কিনা সে সম্পর্কে যুক্তি জানানো সাধারণত দ্বিতীয় বা তৃতীয় বর্ষের অ্যালগরিদম কোর্স হয়। তালিকা এবং মানচিত্রের একই ইন্টারফেস রয়েছে এবং একই ফলাফল দেয় তবে কোনও আকারের প্রয়োগে নাটকীয়ভাবে বিভিন্ন আচরণ থাকতে পারে। এবং একবার আপনি 101 প্রোগ্রামিং থেকে বেরিয়ে আসার পরে, প্রোগ্রামিং 102 একই ভাষা ব্যবহার করবে এমন কোনও গ্যারান্টি নেই। আপনি যদি অ্যারের ধারণাটি থেকে শুরু করেন তবে আপনি কেবল "বলতে পারেন"

প্রারম্ভিক কোর্সে "অ্যারে" "তালিকা" এর চেয়ে বেশি পছন্দ করার আরেকটি কারণ হ'ল অ্যারেগুলি মৌলিকভাবে বোঝা সহজ: 20 এর অ্যারে bytes20 বাইট নেয় (আরও একটি যুগল প্রয়োগের উপর নির্ভর করে অ্যারের শেষ বা দৈর্ঘ্য নির্দেশ করে) )।

একটি "তালিকা" হ'ল মাছের সম্পূর্ণ ভিন্ন কেটলি এবং মৌলিকভাবে বিভিন্ন পারফরম্যান্স বৈশিষ্ট্য সহ অনেকগুলি বিভিন্ন উপায়ে (অ্যারেলিস্ট, লিংকডলিস্ট, এবং সম্ভবত একটি দম্পতি যা আমি ভুলে গেছি) প্রয়োগ করা যেতে পারে। বিভিন্ন তালিকা শ্রেণিগুলি কী করছে তার সাহস না বুঝে আপনার কখন List foo = new ArrayList()বনাম ব্যবহার করা উচিত তার অর্থবহ আলোচনা করতে পারবেন না List foo = new LinkedList()। আপনি যদি শিক্ষার্থীকে একটি তালিকা বাস্তবায়ন ব্যবহার করার চেষ্টা করেন তবে কেউ আপনাকে অন্য কোনও প্রয়োগের পরিবর্তে অ্যারেলিস্ট ব্যবহার করছেন কেন তা জিজ্ঞাসা করছে। এবং "অ্যারেলিস্ট" এর মধ্যে "অ্যারে" শব্দটি অন্তর্ভুক্ত রয়েছে এবং এটি একটির সমর্থন পেয়েছে, সুতরাং এটি "অ্যারে" থেকে "অ্যারেলিস্ট" এ আসলে কোনও বিশাল যুক্তিযুক্ত লাফ নয়।

জনপ্রিয় বিশ্বাসের বিপরীতে, এমন পরিস্থিতি রয়েছে যার মধ্যে তালিকাগুলির উপরে অ্যারেগুলি ব্যবহার করা বোধগম্য হয়, বিশেষত যখন আপনি স্থির আকারের একটি তালিকা নিয়ে কাজ করছেন। এখানে একটি দম্পতি রয়েছে:

  • চেহারা এবং পুনরাবৃত্তি কিছুটা দ্রুত হয় কারণ আপনি পদ্ধতিটির জন্য ওভারহেডের সাথে কাজ করছেন না: foo[n]প্রেক্ষাপটের পিছনে কিছু পয়েন্টার গাণিতিককে অবজ্ঞা করে এবং কিছু করে থাকে, যখন foo.get(n)ডিস্ট্রেশন করতে হয়, কোনও পদ্ধতিতে প্রার্থনা করতে হয়, একটি দ্বিতীয় ডিরিফারেন্স করতে হয় এবং তারপরে সম্ভবত পয়েন্টার গাণিতিকও করতে হয় (যদি আপনি একটি অ্যারেলিস্ট ব্যবহার করছেন; লিঙ্কডলিস্টগুলি সম্ভাব্যভাবে তালিকার প্রতিটি উপাদানকে পুনরাবৃত্তি করতে হবে)।
  • ইনিশিয়েশন অনেক ক্লিনার: int[] foo = new int[]{1, 2, 3, 4, 5}বনাম অন্য স্ট্যাকওভারফ্লো প্রশ্নে পরামর্শগুলি

অ্যারেগুলি যখন অ্যারেগুলিকে ব্যাপকভাবে পরাজিত করে তখন অন্য দৃশ্যের বিষয়টি যখন উপাদানগুলির ক্রমটি মিল হয় তখন তাদের ক্রমটি মিলিত হয় যেখানে তাদের চূড়ান্ত অবস্থানগুলি জানা যাবে, তবে চূড়ান্ত ক্রমের সাথে মেলে না। যদি permএকটি হয় int[256]যে একটি বিন্যাস ঝুলিতে, এক সহজে বিপরীতমুখী একটি অ্যারের সাথে যা করতে পারেন: int[] inv = new int[256]; for (int i=0; i<256; i++) inv[perm[i]]=i; আমি মনে করি না কিছু এক একটি সঙ্গে লিখতে পারে না ArrayList<>পরিষ্কার যেমন হবে।
সুপারক্যাট

@ সুপের্যাট এটি গতিশীল অ্যারেগুলির সাথে কোনও সমস্যা নয়, কেবলমাত্র নির্দিষ্ট প্রয়োগের জন্য; ArrayListসহজেই এমন একটি কনস্ট্রাক্টর দেওয়া যেতে পারে যা একটি নির্দিষ্ট আকারের একটি ডিফল্ট-সূচিত তালিকা তৈরি করে।
ডোভাল

একটি অ্যারে তালিকার পদ্ধতিতে প্রার্থনা ওভারহেডের সাথে মোকাবিলা করতে হবে এমন দাবিটি ব্যাক আপ করার জন্য আপনার কাছে কি উত্স আছে? তত্ত্ব এটা আছে, কিন্তু বাস্তবে আমি অবাক হবো getএবং setinlined পেতে না।
ডোভাল

@ দোভাল: আ-সু-নকশিত ভাষা / কাঠামোর কোনও গতিশীল-অ্যারে প্রকার সরবরাহ করা উচিত নয় যা সুবিধাজনকভাবে আইটেমগুলিকে সিকোয়েন্সের বাইরে যুক্ত করতে পারে, তবে জাভা এ জাতীয় ধরণের সরবরাহ করে না no
সুপারক্যাট

@Doval: এমনকি যদি getএবং setহতে পারে ইন-রেখাযুক্ত, ভালো কিছু myList.set(23,myList.get(23)+1)কাছাকাছি কোথাও দক্ষ হিসাবে থাকবে myArray[23]+=1। আরও, এমনকি এমন ধরণের জন্যও যা বক্সিংয়ের প্রয়োজন হয় না, আমি খুব আশ্চর্য হব যদি কোনও জিটটারের for (i=0; i<1000; i++) myList2.set(i+2000,myList2.get(i+3000));পারফরম্যান্সের কাছাকাছি যে কোনও জায়গার সমতুল্য কিছু হতে পারে তবে কোনও System.arrayCopy(myArray1,3000,myArray2,2000,1000); কাঠামোর গতিশীল অ্যারে ধরণের দ্রুত কপি-রেঞ্জ অপারেশন না দেওয়ার কোনও কারণ নেই, তবে জাভা দেয় না।
সুপারক্যাট

7

জাভা যে কোনও ধরণের ভেরিয়েবলগুলিকে অ্যারেতে সঞ্চয় করতে দেয়। বিপরীতে, ArrayListশুধুমাত্র রেফারেন্স সংরক্ষণের অনুমতি দেয়। এক এইভাবে থেকে কার্যকররূপে আলোচনা নাও হতে পারে ArrayListপ্রথম আচ্ছাদন ছাড়া কিভাবে স্বয়ংক্রিয় বক্সিং রেফারেন্স প্রকারের প্রিমিটিভের রূপান্তর করবে এবং কীভাবে স্বয়ংক্রিয় আনবক্সিং হবে কখনও কখনও প্রিমিটিভের রেফারেন্স ধরনের রূপান্তর:

for (int i=10; i<=10000; i*=10)
{
    ArrayList<Integer> l = new ArrayList<Integer>();
    l.add(i);
    l.add(i);
    l.add(l.get(0));
    System.out.print("i=" + i);
    System.out.print(" #0==i:" + (l.get(0)==i));
    System.out.print(" #1==i:" + (l.get(1)==i));
    System.out.print(" #2==i:" + (l.get(2)==i));
    System.out.print(" #0=#1:" + (l.get(0)==l.get(1)));
    System.out.print(" #1=#2:" + (l.get(1)==l.get(2)));
    System.out.println(" #0=#2:" + (l.get(0)==l.get(2)));
}

কোডটি যদি একটি int[3]পরিবর্তে একটি ব্যবহার করে থাকে ArrayList, এতে অবাক হওয়ার কিছু নেই। তিনটি উপাদানই iএকে অপরের সাথে সমান এবং তুলনা করবে । ব্যবহার ArrayList, কিন্তু, যদিও তালিকার সব তিনটি উপাদান সবসময় সমান তুলনা করবে i, এবং প্রথম ও তৃতীয় সবসময় একে অপরকে সমান তুলনা করবে প্রথম দুটি উপাদান শুধুমাত্র একে অপরের সমান হবে যখন i1, 10, বা 100, কিন্তু (বেশিরভাগ বাস্তবায়নের ক্ষেত্রে) কখন i1000 বা 10000 নয়।


আপনি কি ব্যাখ্যা করতে পারবেন যে # 0 এবং # 1 কেন 1 বা 10 বা 100 এর সমান হবে? আমি এখন পর্যন্ত অনুসরণ করেছি।
ম্যাথু পড়ুন

2
@ ম্যাথেরিয়ড: Integerক্লাসটি নেস্টেড ক্লাস বলেছে IntegerCacheযা প্রাক-প্রাথমিকীকৃত Integerঅবজেক্টগুলিকে ধারণ করে যা বিভিন্ন মানের জন্য সাধারণত -128..127; এই ব্যাপ্তির বাইরে একটি মান বক্সিং করার জন্য একটি নতুন অবজেক্ট তৈরি করা প্রয়োজন, তবে ক্যাশেড রেঞ্জের মধ্যে একটি মান বক্সিং করা কেবলমাত্র সঞ্চিত প্রাক-প্রাথমিক উপাদানগুলির মধ্যে একটিতে একটি রেফারেন্স ফিরিয়ে আনবে IntegerCache.cache। যে কোনও ভাল জাভা প্রোগ্রামারকে সচেতন হওয়া দরকার যে Integerএকই মানের এনক্যাপসুলেটিং দ্বি- টাইপ ভেরিয়েবলগুলি সমান তুলনা করতে পারে বা নাও পারে, তবে এই ধারণাটি খুব তাড়াতাড়ি প্রবর্তন করলে শিক্ষার্থীরা সন্ত্রাসে পালিয়ে যেতে পারে।
সুপারক্যাট

হু, প্রাক-ইনিটালাইজড অবজেক্টের কারণে এটি অনুমান করতে পারে নি। তথ্যের জন্য ধন্যবাদ!
ম্যাথু

1
@ ম্যাথেরিড: আমার ইচ্ছা জাভা কিছু ধরণের অন্তর্নিহিত রূপান্তরকে এর সাথে অস্বীকার না করে ==। অটো-আনবক্সিং ছোঁড়াতে পারে এমন সম্ভাবনা দেওয়া সত্ত্বেও, আমি এটিকে পুরোপুরি অস্বীকার করতে আগ্রহী, তবে এর সাথে এর আচরণটি ==বিশেষত ভয়াবহ। ==অপারেটর এছাড়াও মত ক্ষেত্রে খারাপভাবে আচরণ করবে 16777217==16777216f[TRUE রিপোর্ট], এবং জন্য অন্তর্নিহিত ধর্মান্তর long v=Math.Round(123456789), w=Math.Round(123456789012345)অপ্রত্যাশিত হতে কার্যক্ষম হয় [আপনি অনুমান করতে পারেন কি সেই এক্সপ্রেশন সমর্পণ করা হবে?]
supercat

হিসাবে IntegerCache, অবশ্যই সময় আছে যখন এটি পারফরম্যান্সে সহায়তা করতে পারে তবে এটি ঘন ঘন এমন কোড তৈরি করতে পারে যা জাস্ট প্লেইন র্রং যা কিন্ডা-বাছাইয়ের কাজ করে। কিছু উপায়ে, আমি আশা করি এমন একটি মোড থাকত যেখানে বক্সিং দুটি পূর্ণসংখ্যার ক্যাশে থেকে এলোমেলোভাবে বস্তু ফিরিয়ে আনবে এবং কোষের পরিমাণটি এলোমেলোভাবে নতুনের সাথে ক্যাশে আইটেমগুলি প্রতিস্থাপন করবে, যাতে কোডের মূল্যবোধের আচরণের উপর নির্ভর করে -128..127 হবে খুব দীর্ঘ জন্য সফল সম্ভাবনা।
সুপারক্যাট

6

আমি মনে করি ArrayListঅভ্যন্তরীণভাবে অ্যারে ব্যবহার করার কারণে প্রথমে অ্যারে কীভাবে ব্যবহার করতে হবে তা শেখানো আমাদের বোধগম্য হয় । ArrayListবর্গ নামক একটি সদস্য পরিবর্তনশীল হয়েছে elementDataযা হল Objectঅ্যারে।

জেডিকে ArrayList উত্স কোড থেকে :

/**
 * The array buffer into which the elements of the ArrayList are stored.
 * The capacity of the ArrayList is the length of this array buffer.
 */
private transient Object[] elementData;

আপনি যখন উপাদানগুলি যুক্ত, আপডেট, পুনরুদ্ধার বা সরিয়ে ফেলেন তখন ArrayListসেগুলি এই ক্রিয়াকলাপগুলি করতে এই অভ্যন্তরীণ অ্যারে ব্যবহার করে। যেমন ব্যবহারকারী Ixrec ইতিমধ্যে চিহ্নিত করেছে - ArrayListএটি কেবল একটি উচ্চ-স্তরের বিমূর্ততা যা সাধারণত কাজ করা সহজ।


কিন্তু একটি অ্যারে অভ্যন্তরীণভাবে মেমরির ব্লকের পয়েন্টার ব্যবহার করে। বিমূর্তির সেই নির্দিষ্ট স্তরে কেন শুরু করবেন?

প্রশ্নটি ট্যাগ হিসাবে রয়েছে Java- সাধারণত আপনি যখন ব্যবহার করতে পারেন তখন কেন অ্যারে পড়ানো হয় তা জিজ্ঞাসা করা হয়েছিল ArrayList। জাভা পয়েন্টার নেই। সঠিক বা ভুল, আমি মতামত রেখেছি যে জাভা থেকে শিক্ষার্থীদের শুরু করার জন্য সি / সি ++ একটি ভাল ভাষা। প্রোগ্রামিংয়ের অনেক বিষয় সি / সি ++ এর জ্ঞান থাকার মাধ্যমে আরও ভালভাবে বোঝা যায়।
ডেরেক ডব্লু

3

ধরে নিই যে তালিকার সাথে কাজ করা সত্যই সহজ, আপনি যেমনটি বলেছেন - এটি আসলে কোনও ব্যাপার নয়। "বুনিয়াদ থেকে জটিল" সম্পর্কে শেখা "হার্ড টু হার্ড" এর চেয়ে বেশি। যদি মৌলিক বিষয়গুলি গুরুত্বপূর্ণ না হয় তবে কম্পিউটার বিজ্ঞান কোনও একাডেমিক ক্ষেত্র নয়। অনলাইনে টিউটোরিয়াল থেকে বিদ্যমান ফ্রেমওয়ার্ক / লাইব্রেরি ব্যবহার করে আপনি কীভাবে অ্যাপ্লিকেশনগুলিতে ক্লিক করতে পারবেন তা আপনি কেবল শিখতে পারেন। (অবশ্যই, কেউ এই লাইব্রেরি লিখতে হবে ... এবং কাউকে ArrayListপ্রথমে প্রয়োগ করতে হবে ....)


অনেক ক্ষেত্রে যে ব্যবহারগুলি ArrayListপৃথক অ্যারে এবং "লাইভ আইটেম" গণনাটি ব্যবহার করে আরও ভালভাবে পরিচালনা করা যায়, তা ছাড়া অ্যারেটির সাথে কাজ করার কোনও সুবিধাজনক উপায় নেই এবং এগুলি একত্রিত না করে একসাথে গণনা করা যায়।
ক্যাট

2

এর কারণ, একাডেমিক শিক্ষার সবচেয়ে গুরুত্বপূর্ণ বিষয় হ'ল আপনি যা করেন তার বর্ণনা দেওয়ার জন্য সঠিক পরিভাষাটি ব্যবহার করতে শেখানো।

তালিকা অ্যারে অন্য কিছু। এবং আপনি java.util.Listজাভা ব্যবহার করতে পারবেন না কারণ এটি একটি ইন্টারফেস। আপনি সাধারণত ব্যবহার করেন java.util.ArrayListযা একটি তালিকা বাস্তবায়ন, কোনও তালিকা নয়, তবে গতিশীল অ্যারের চারপাশে কোনও বস্তুর মোড়ক রয়েছে। সুতরাং আপনি বলেছেন যে আপনি একটি 'তালিকা' ব্যবহার করেন তবে আপনি একটি অ্যারে ব্যবহার করেন।

এই পরিভাষা বিশৃঙ্খলা এড়িয়ে যাওয়া এবং শিক্ষার্থীদের অ্যারে কী তা শিখতে কেবল অ্যারে ব্যবহার করা খুব যুক্তিসঙ্গত। আপনি যদি জাভাতে অ্যারে ব্যবহার করেন তবে কমপক্ষে আপনি অ্যারে ব্যবহার করেন।

সত্যি বলতে কী, জাভা দিয়ে প্রোগ্রামিং শেখানো ভাল ধারণা নয় এটিও এই যুক্তি। প্রোগ্রামিংয়ের প্রাথমিক ধারণাটি সঠিকভাবে শেখা শক্ত hard


হ্যাশম্যাপ কি? অ্যারে হ'ল এক ধরণের হ্যাশম্যাপ, এক উপায়ে ..
থুফির

@ তুফির কীভাবে অ্যারে হ্যাশম্যাপ হতে পারে? এগুলি সম্পূর্ণ আলাদা ডেটা স্ট্রাকচার।
ডানুবিয়ান নাবিক

আপনি একটি হ্যাশম্যাপ সহ একটি অ্যারের প্রতিনিধিত্ব করতে পারেন। কোনটি "মৌলিক"? আমি যুক্তি দিয়েছি হ্যাশম্যাপটি ধারণাটি আরও আকর্ষণীয়।
থুফির

1
@ তুফির না, আপনি পারবেন না। আপনি কেবল অনুকরণ করতে পারেন। অভ্যন্তরীণভাবে প্রতিটি ডেটা স্ট্রাকচার এটি যা হবে। সেগুলি মৌলিক এবং ধারণাগতভাবে পৃথক জিনিস। এ কারণেই জাভা বা জাভাস্ক্রিপ্টের মতো উচ্চ বিমূর্ত ভাষা দিয়ে প্রোগ্রামিং শেখানো খারাপ ধারণা। এটি সেখানে পরিষ্কার নয়, ডেটা স্ট্রাকচারগুলি আসলে কী।
ড্যানুবিয়ান নাবিক

1

আপনি আক্ষরিকভাবে কখনও দেখেন নি বা কোনও অ্যারে ব্যবহার করেন নি? তালিকাগুলি ছাড়াও আমরা এগুলি সর্বদা ব্যবহার করি । আমরা সাধারণত জাভা ব্যবহার করি না, তবে আমরা প্রচুর অন্যান্য ভাষা ব্যবহার করি যা স্পষ্টতই মিল খুঁজে পায় draw

অ্যারে এবং তালিকাগুলির মধ্যে একজনের হালকা ওজন এবং অতিরিক্তভাবে, আরও বেশি পয়েন্টে যেখানে অন্যটির আরও কার্যকারিতা পাওয়া যায়। প্রোগ্রামিংয়ের একটি সাধারণ নিয়ম হিসাবে, যখন দুটি অনুরূপ ধরণের থাকে যা মূলত সেই লাইনগুলির সাথে বিভক্ত হয়, আপনার যদি হালকা ওজনের প্রয়োজন হয় না যদি না আপনার সত্যিকারের ফ্যানসিয়ার প্রয়োজন হয়। ওভারহেড হ্রাস করার পাশাপাশি, এটি প্রোগ্রামে বিশৃঙ্খলা ও রাজ্যের পরিমাণ এবং বিশেষত এর কোডের উপর একটি হ্যান্ডেল রাখতে সহায়তা করে । পরীক্ষার সময় যদি কিছু ভুল হয়ে যায় তবে আপনার দেখার জায়গা কম রয়েছে; এবং আরও গুরুত্বপূর্ণভাবে অ্যারে বনাম তালিকার ক্ষেত্রে, লোকেরা আপনি আসলে এটির জন্য কী ব্যবহার করছেন এবং এটি করার চেষ্টা করছেন এর সীমাবদ্ধ সুযোগ সম্পর্কে আরও ভাল ধারণা পায়।

এবং হ্যাঁ, একাডেমিক দৃষ্টিকোণ থেকে, শিক্ষার্থীদের বেসিকগুলি শেখানোর অতিরিক্ত কারণ রয়েছে। তবে এটি কিছুটা গভীর হয়। অ্যারে এবং তালিকাগুলি বাল্কিয়ার জাতীয় ধরণের একটি ভাল উদাহরণ যা প্রায়শই কেবল উপরের দিকে তৈরি করা হয় এবং প্রায়শই কেবল চারদিকে মোড়ানো, হালকা-ওজনের প্রকারের অন্তর্নিহিত উদাহরণ রয়েছে। এমনকি তালিকাগুলির অন্তর্নিহিত অ্যারে না থাকলেও তারা বাহ্যিকভাবে তাদের মতো আচরণ করে। কাউকে তালিকার কী তা শেখানোর একটি অংশ হ'ল তাদের অ্যারে কী তা শেখানো।

আমি সম্ভবত এটি সি ++ এর মতো ভাষায় হাতছাড়া হয়ে দেখতে পেলাম, যেখানে অ্যারেগুলি মূলত তাদের চেয়ে বেশি ছিটানো যায় না, তবে উচ্চ-স্তরের ভাষাগুলিতে তারা প্রায় নিজের কাছেই তালিকাভুক্ত। যদি কোনও নির্দিষ্ট পরিস্থিতিতে যদি তারা আপনার প্রয়োজনগুলি যথাযথভাবে মেটায়, তবে আপনাকে অন্য কিছু কেন ব্যবহার করতে হবে?


আমি বলব না যে কোনও তালিকার "আরও" কার্যকারিতা রয়েছে, যতটা এটিতে "আলাদা" কার্যকারিতা রয়েছে। যে T[]কোনও ক্রমে আইটেম গ্রহণ করার জন্য গেটের ঠিক বাইরে, একটি নতুন প্রস্তুত থাকবে, যখন কোনওটিকে ArrayList<T>প্রয়োজনীয় সংশোধন করার আগে আইটেমগুলি যুক্ত করার প্রয়োজন হয়। একটি তুলনামূলকভাবে দ্রুত T[]একই আকারের রেঞ্জের আইটেমগুলির একটি স্বেচ্ছাসেবী কপিরিকে অনুলিপি করতে পারে T[], যখন ArrayList<T>এক তালিকার বাইরে আলাদা আলাদাভাবে আইটেমগুলি পড়তে হয় এবং অন্যটিতে সেগুলি সংরক্ষণ করতে হয় - অনেক ধীর এবং কম সুবিধাজনক।
সুপারক্যাট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.