ኧሬይ (Array)6.1 ምዕላደ-ቃላት
6.2 የኧሬይ ዓይነት ሲሉየዴታ ቍጥር እየበዛ ሲመጣ፥ ማጠናቀሩ፥ ማደራጀቱ፥ እንዲሁም ልዩ ልዩ ተግባራትን መፈጸሙ፥ ስልታዊ የሜሞሪ አያያዝና አጠቃቀም ይጠይቃል። ሜሞሪን ከምናደራጅበት መንገዶች መካከል አንዱ ኧሬይ ነው። ኧሬይ ስንል፥ ተመሳሳይ የዴታ ዓይነት ያላቸው፥ በአንድ ስም የተወከሉና፥ በተርታ የተደራጁ የሜሞሪ ክፍሎችን ነው። ይህ አባባል፥ የጃቫን ኧሬይ መሠረታዊ ባሕሪያት በሙሉ አይጠቀልልም፤ ግን አጠቃላይ መንፈሱን ያንጸባርቃል። የቀረውን ወደፊት እንደርስበታለን። ለእንደ ሲ (C) ላሉት ቋንቋዎች ግን አባበሉ ከእውነት አይርቅም። የኧሬይ ሥዕላዊ መልኩ ይኸን ይመስላል። የአንድ ኧሬይ መሠረታዊ ባሕሪያት እነዚህ ናቸው።
የሚከተለው ምሳሌ የኢንትጀር ኧሬይ ፈጥሮ፥ በ«ባቦ ሰጥ» የወጡ ቍጥሮችን ሞላቶ፥ በመጨረሻ የኧሬዩን ይዘት ያትማል። የኧሬይ አወጣጥን፥ በእያንዳንዱ ሕዋስ ውስጥ ዴታ ለማስገባት ወይም ለማስወጣት የኧሬይ አጠቃቀስን መንገድ ያሳያል።
6.3 ኧሬይ አወጣጥና አሰነዳድበአጠቃላይ ደረጃ፥ የኧሬይ ተውላጠ-ቃል አወጣጥ ይኸን ይመስላል። ከይሆናል (=) በስተግራ ያለው የኧሬዩን ዴታ ዓይነት እንዲሁም ጥልቀትና ስም ይገልጻል፤ ከይሆናል (=) በስተቀኝ፥ የኧሬዩን ቦታ ይከፍታል። ቃሉን በዝርዝር እንመልከት።
አንድ ኧሬይ ከተፈጠረ በኋላ ለሥር ዝግጁ ነው። ሕዋሶቹ ውስጥ ዴታ መጻፍ ወይም ማንባብ ይቻላል። የዴታ አጻጻፉ ይኸን ይመስላል።
double[] constants = new double[19] ; በአንድ ሕዋስ ውስጥ ያለውን ይዘት ለማወቅ የሕዋሱን ጠቋሚ መጠቀም ይጠይቃል። double value = constants[0] ;
ወይም System.out.println(constants[0]) ; ማንኛውም የጃቫ ኧሬይ ተፈጥሯዊ መጠኑን በlength አባሉ በኩል ይጠብቃል። ሕዋሳቱን ለማየት ከመሞከራችን በፊት የኧሬዩን መጠን አለማለፋችንን ለማረጋገጥ የlengthን ዕሴት መመለክት አሥፈላጊ ነው። አስቀድመን ያየናቸው ኧሬዮች በመሠረታዊ የዴታ ዓይነት ላይ የተገነቡ ናቸው። ቀጥለን የመደብ የኧሬይ ዓይነቶችን እንመለከታለን። ኧሬይ ሁልጊዜ ኧሬይ ነው። በString መደብ ላይ ይሁን ወይም በint ላይ፥ በቃል አገባብና አሠራር አንድ ነው። የሜይን መላ (main method) ከጠሪው የሚላከውን ዕሴት የሚቀበልበት ተውላጠ-ቃል የእስትሪንግ ኧሬይ ነው። ከላይ የተሰጠውን የSimpleArray መደብ ብንመለከት የሜይን መላ የእስትሪንግ ኧሬይ በአናቱ ላይ አውጆ ዕሴት ለመቀበል ዝግጁ ነው። የማንኛውም የመደብ ዓይነት ኧሬይ መፍጠር እንችላለን። ለምሳሌ፥ String[] names = new String[32] ; ይህ ቃል 32 ሕዋሳት ያሉት የእስትሪንግ ቦታ ይከፍታል። በዚህ ኧሬይ ልንጠብቅ የምንችለው የእስትሪንግ ብዛት 32 ነው። ልንስተው የማይገባ አንድ ነገር ቢኖር፥ 32 ሕዋስ ያለው ኧሬይ በመፍጠራቸን 32 የእስትሪንግ ርቢ አረባን ማለት አይደለም። ቦታና ርቢ ለይቅል ናቸው። ኧሬዩን በእስትሪንግ ርቢ ለመሙላት፦ names[0] = "Addis Ababa" ; ወይም
String capital = new String("Addis Ababa") ; የኧሬዩ የመጀመሪያ ሕዋስ ውስጥ የተሰጠውን የእስትሪንግ ርቢ ይከታል። የሁለቱም ቃሎች የመጨረሻ ውጤት አንድ ዓይነት ነው። ሁሉንም የኧሬይ ሕዋሳት በተመሳሳይ የእስትሪንግ ርቢ እንሙላ ከተባለ ይኸን ይመስላል።
for (int i=0; i < names.length; i++) እያንዳንዱን ሕዋስ ብንመረምር ተመሳሳይ ዕሴት ይኖረዋል። እናም፦
for (int i=0; i < names.length; i++) { የሚከተለው ምሳሌ የአንባቢውን ትግስትና አትኩሮት ይጠይቅ ይሆናል።
6.4 ኧሬይና መጠኑኧሬይ ስንፈጥር ስንት ሕዋስት እንደሚኖረው መወሰን እንደምንችል እስካሁን ድረስ ያየነው ነው። ነገር ግን ይህ ግዴታ አይደለም። የኧሬዩን መጠን እንደተፈላጊነቱ የመቀየር ችሎታው አለ። አንዳንድ ጊዜ የኧሬይን ተውላጠ-ቃል አውጥቶ ከጊዜ በኃላ ቦታውን መፍጠር አንደዚሁ። ምሳሌዎችን እንይ። ObjectCounter[] oc ; ይህ ኧሬይ መደባዊ ሆኖ ቦታ ግን አልተሰጠውም። ከጊዜ በኃላ፥ ቦታ መሰየም እንደሚከተለው ይፈቀዳል። በዚህ መሠረት ኧሬዩ 128 ሕዋሳት ይኖሩታል። oc = new ObjectCounter[128] ; የኧሬዩ የሕዋሳት ቍጥር ብዙ ሆኖ ከተገኘ፥ በቀላሉ መቀየር ይቻላል። oc = new ObjectCounter[16] ;
አንድ ኧሬይ አዲስ ቦታዎች ሲሰይም፥ ከዛ በፊት ይዞት የነበረውን ቦታ የመልቀቅ ግዴታ አለበት። መልሶ የማየት ዕድል በፍጹም የለውም። የተለቀቁ ቦታዎች ከፕሮግራሙ ውጭ ይሆናሉ። ኧሬዮዎችን አዳዲስ ቦታዎቹን መሰየም ቢቻልም ቅሉ የተሰየመን ቦታ ማስፋት ወይም ማጥበብ ክልክል ነው። በሌላ በኩል ኧሬዩ የያዘውን ቦታ ማራገፍ ከተፈለገ መንገዱ እንዲህ ነው። oc = null ; የnull ትርጕም «ምንም» ነው። ኧሬዩ ይዞት የነበረው ቦታ ይጠፋል። አሁን ባለበት ሁኔታ ለሥራ ዝግጁ አይደለም። 6.5 ኧሬይ አሰነዳድየጃቫ ፕሮግራሞች ለሥራ በሚሰማሩበት አካባቢዎች ውስጥ የሜሞሪ ቦታዎች ጠባቂና አስተዳዳሪ ኦ/ኤስ (Operating System) ነው። ለፕሮግራሞች ቦታ ያድላል። የለቀቁትን ይሰበስባል። የቦታዎችን እጥረት የመከታተል ኃላፊነቱ የእሱ ነው። የሜሞሪ ቦታዎችን ሲያድል ውስጣቸውን አያጸዳም። ተጠቃሚዎቹ ፕሮግራሞች የለቀቁትን ቦታ ሲመልሱ እንዲሁ። ይህ ሁኔታ ለግድፈቶች መነሻ ጥርጊያ መንገዶች ይከፍታል። ፕሮግራሞች ተውላጠ-ቃል ሲያወጡ፥ መደብ ሲያራቡ፥ እንዲሁም ኧሬይ ሲፈጥሩ ኦ/ኤሱ የተፈለገውን ቦታ ያድላል። የተገኙ ቦታዎች ሰለማይጸዱ፥ ይዞታቸው ምን እንደሆነ ማወቅ ወይም መገመት አይቻልም። ጥንቃቄ ካልወሰድን፥ ያልታሰበ ግድፈት ፕሮግራማችን ውስጥ እንከታለን። ስለዚህ፥ በአጠቃላይ ደረጃ የተለመደው፥ ተውላጠ-ቃላትን ስናወጣ፥ እንዲሁም ኧሬዮችን ስንፈጥር፥ ለሥራ በሥነ-ሥርዓት በቅድሚያ ማዘጋጀት ነው። ተውላጠ-ቃላቱንም ሆነ ኧሬዮችን ባግባብ መነሻ ዋጋ መሰየም። ይኸን ተግባር በእንግሊዘኛ «initialization» ይሉታል። ጃቫ በተፈጥሮው ተውላጠ-ቃላትን በራሱ መነሻ ዋጋ ይሰይማል። በመሆኑም፥ ላይ የጠቀስነውን የግድፈት መነሻ ሁኔታ ይቀንሳል። ይህ በዚህ እንዳለ፥ ኧሬይ ስናወጣ፥ መነሻ ዋጋ መሰየም ተፈላጊ ከሆነ፥ ኃላፊነቱ የራሳችን ነው። ጥቂት ምሳሌዎችን እንመለከት። double[] num = {3.14159, 2.71, 1.6} ; ይህ ኧሬይ ቃል፥ የሕዋሳቱን መጠን በገሀድ ሳይጠቅስ ኧሬይ ይፈጥራል። ሰንት ሕዋሳት መኖር እንዳለበቸው ወሳኙ የጃቫ ኮምፓይለር ሲሆን ቍጥሩ የሚመጣው ከመነሻ ዋጋዎቹ ነው። ስለዚህ የnum ሕዋሳት ቍጥር 3 ነው። በተጨማሪ የኧሬዩ የሕዋሳት ቍጥር 3 ከመሆኑም በላይ በእያንዳንዱ ሕዋሳት ውስጥ ከላይ የቀረቡት ዕሴቶች በተርታ ይጠበቃሉ። ዝርዝሩ፦
መናሻ ዋጋዎች አሰያይም ልዩ ልዩ መልክ ወይም ቃል አገባብ አላቸው። የchar ኧሬይ እንዲህ ነው። char[] lc = {'a','b','c','d','e','f','g','h','i'} ; የመነሻ ዋጋዎችን ልብ ካልን እያንዳንዱ ሆሄ በተናጠል የጥቅስ ምልክት ታጥሯል። የኧሬዩ የሕዋሳት ቍጥር 9 ነው። በመደብ ላይ የተመሠረቱ ኧሬዮች መነሻ ርቢ አሰያየም ደግሞ ለጥቆ። String[] names = {new String("Earth"), new String("Mars")} ; የnames ኧሬይ 2 ሕዋሳት አሉት። የመጀመሪያው ሕዋስ ይዘት የእስትሪንግ ርቢ ሲሆን ዕሴቱ «Earth» ነው። የሁለተኛው ሕዋስ ይዘት «Mars» ነው። የሚከተለው ምሳሌ ስለተርታ (sorting) ነው። የእስትሪንግ ኧሬይ ከፈጠረ በኃላ ተርታ ለማስያዝ ይሞክራል። መላዎች ሲጠሩ የኧሬይን አለካክና አቀባበል እንዲሁም ለውጥ የሚያስከትለው ሁኔታ ጥብቅ ትኩረት ቢሰጠው መልካም ነው። ምሳሌው ለጥናት መልካም ይሁን እንጂ ለተግባራዊ ሥራ ሌሎች መፍትሔዎች ይመረጣሉ።
6.6 ማንኛውም ኧሬይ የመደብ ርባታ (object) ነውበጃቫ ቋንቋ፥ ማንኛውም ኧሬይ የመደብ ርቢ (object) ነው። ይህ ከሌላ የፕሮግራም ቋንቋ ለምንመጣ አደናገሪ ሊሆን ይችላል። ነገር ግን አውነት ነው። የመደብ ዝምድናው ከObject መደብ ጋር ነው። ወደፊት እንደምናየው ማንኛውም መደብ የObject ዘር ነው። ከሱ ጋር የማይዛመድ መደብ መኖር አይችልም። ኧሬዮች የመደብ ርቢ በመሆናቸው ሁሉም የሚጋሯቸው የመላና የተውላጠ-ቃል አባላት አሏቸው። የሕዋሳት ቍጥራቸውን በlength አባል ተውላጠ-ቃል ይጠብቃሉ። የአንድ ኧሬይ መጠን (length) የሚወሰነው የእሬዩ ቦታ ሲከፈት ወይም ሲታወቅ ነው። በዛን ጊዜ የlength ይዘት የኧሬዩ መጠን ይሆናል። የlengthን ይዘት መቀየር በፍጹም አይቻልም። double[] charge = new double[9] ; ልክ ይህ ኧሬይ ሲፈጠር፥ ከሚኖሩት አባላቱ መካከል አንዱ length ከመሆኑም በላይ የእሬዩን መጠን ስንት እንደሆነ በሆድቃው ይጠብቃል። መጠኑ 9 ነው። ምንም እንኳን በObject መደብ ውስጥ ያሉትን መላዎች ማንኛውም ኧሬይ ቢወርስም፥ በተግባር ደረጃ ይኸን ያህል አያስፈልጉም። ለማንኛውም ግን መኖራቸው መረሳት የለበትም። 6.7 ባለብዙ ኧሬይ (Multidimensional array)እስካሁን ድረስ የተመለከትናቸው ኧሬዮዎች በሙሉ ባለተናጠል መስመር ናቸው። በተርታ የተደራጁ፥ ቅደም ተከተል ያላቸው፥ አንዱ ከአንዱ እንደ ሰንሰለት የተያያዙ። ተናጠል ኧሬዮዎች በተናጠል ለሚደራጁ ዴታዎች አመቺ ሆነው በሠንጠረጅ መዋቅር ለሚደራጁ ዴታዎች ግን አመቺነታቸው ይቀንሳል። በሠንጠረጅ መልክ መደራጀት ያለባቸው ዴታዎች አንድ አይነት መሆናቸው ከታወቀ፥ ባለብዙ ኧሬይ መጠቀሙ አንዱ መፍትሔ ነው። ባለብዙ ኧሬይ፥ በእንግሊዘኛ (multidimensional array)፥ በአያሌ አቅጣጫዎች ተዘርጊ ቦታ ለመፍጠር ያስችላል። ባለሠንጠረጅ ኧሬይ ሁለት አቅጣጫ አለው፤ ዓምዳዊና ረድፋዊ። ሁለት አቅጣጫ ያለው የባለብዙ ኧሬይ ቃል አወጣጥ ይኸን ይመስላል። int[][] table = new int[10][10] ; ኧሬዩ ስንት አቅጣጫዎች እንዳሉት ወሳኙ የ[] ቍጥር ነው። በዚህ ምሳሌ ሁለት ቀጥተኛ ቅንፎች አሉን፤ በመሆኑም table ባለሁለት አቅጣጫ ኧሬይ ይሆናል። በስተቀኝ በኩል ያለው 10 በ 10 የተባዛ ቦታ ይፈጥራል። በአጠቃላይ የሕዋሳቱ ቍጥር 100 ነው። እነዚህን ሕዋሳት ማየት የሚቻለው አንድ በአንድ ሲሆን ቃል አገባቡ ይኸን ይመስላል። table[0][9] = 12 ;
በ0 ረድፍና በ9 ዓምድ ያለው ሕዋስ ውስጥ 12ን ይከታል። በዚህ መንገድ እያንዳንዱን ሕዋስ መጠቀም ይቻላል። ሁሉንም በአንድ ቃል ማየት ወይም መንካት አይፈቀድም። የሕዋሳቱ መጠኖች የግድ ተመሳሳይ መሆን የለባቸውም። የተፈለገውን ያህል ልዩ ልዩ መሆን ይችላሉ። ለምሳሌ፦ Double[][][] values = new Double[3][7][2] ; ባለሦስት አቅጣጫ ኧሬይ ይፈጠራል። ነገር ግን እያንዳንዳቸው ያላቸው የሕዋሳት መጠን የተለያየ ነው። ይህ ባለሦስት ኧሬይ በአጠቃላይ 42 ሕዋሳት አሉት። የመጨረሻው ሕዋስ ውስጥ 12.29 ማስገባት ብንሻ ቃሉ ይኸን ይመስላል። values[2][6][1] = 12.29 ; ይኸን ክፍል በተግባራዊ ምሳሌ እንጨርሳለን። ፕሮግራሙ በተሰጠው የላዕላይ ቍጥር ላይ በመንተራስ የማባዣ ሠንጠረጅ ያበጃል።
|
||||||||||||||||||||||||||
Copyright © 2002-2005 Senamirmir Project