მასივები არის ტიპების ერთობა, რომელსაც გააჩნია განსაზღვრული სიდიდე, რომლის შეცვლაც შეუძლებელია. მასივი შეიძლება იყოს ყველა ტიპი როგორც პრიმიტიული ისე რეფერენტული, (byte,short, String, boolean და ა.შ) მისი ძირითადი მოვალეობა არის მოახდინოს შენახვა მეხსიერებაში ერთი და იგივე ტიპის, რომელსაც გააჩნია უამრავი ღირებულება, მაგალითისთვის, წარმოიდგინეთ შეფასების სისტემა, სადაც ყველა შემფასებელს განსხვავებული აზრი აქვს მაგრამ ერთი შეფასების სტილი, (ციფრებით აფასებს) ამ შემთხვევაში ყურადღებას იპყრობს არა პროცესი არამედ ის თუ რით ხდება შეფასება. ციფრი ჩვენთვის არის int type, ამიტომ თუ შემფასებელი არის 10 კაცი, 10 ინტს ხომ არ დავწერთ? ცოტა მოუქნელი და მოსაწყენი იქნება ხო? ამიტომაც გვაქვს მასივი სადაც ვწერთ int[] shemfasebeli= new int[10]-ს. როგორც მაღლა ავღნიშნეთ თუ მოვახდენთ სიდიდის დეფინირებას მას მერე ვეღარ შევცვლით, გვაქ მასივი 10 ინტეჯერით, 1 ცვლადით და 1 ტიპით. 10 თავისუფალ ადგილზე შეგვიძლია შეივყვანოთ 10 სხვა და სხვა ციფრი რომელსაც ცვლადი shemfasebeli შეინახავს. შეყვანა ხდება შემდეგ ნაირად. Shemfasebeli[0] = 7; Shemfasebeli[1] = 27; Shemfasebeli[8] = Shemfasebeli[0] + Shemfasebeli[1]; და ასე შემდეგ.
ფოტოზე კარგად ჩანს თუ რას წარმოადგენს
მასივი, მას გაჩნია ელემენტები, ინდექსი და სიდიდე. ეს არის სამი რამ რითაც ვმუშაობს
მასივთან, ძირითადი გამომრჩა მას გააჩნია ლიტერალი, [] ß ეს
კვადრატული ფრჩხილები გახლავთ მასივის ლიტერალი, როდესაც ტიპის შემდგომ მას ვწერთ სისტემამ
იცის რომ უნდა შეიქმნას მასივი.
რა არის ელემენტი: ელემენტი არის ციფრი
რომელიც ინახება მითითებულ პოზიციაზე, ან სახელი, ან უნიკალური კოდური სიტყვა დ ა.შ.
ნებისმიერი რამის შენახვა შეიძლება მასივში.
რა არის ინდექსი: ინდექსი არის პოზიცია
სადაც ინახება ელემენტი. ათვლა ინდექსურ სისტემაში იწყება ნულიდან, შესაბამისად თუ
გვინდა მასივის მესამე ელემენტის ნახვა უნდა გამოვიძახოთ ინდექის მეშვეობით რომელიც
გამოიყურება შემდეგნაირად. Shemfasebeli[2]; ალბათ მიხვდით
2 რატომაც. (0,1,2). თუ
მოვახდინეთ გამოძახება ინდექის რომელიც არ არსებობს ჯავა გვიჩვენეს ერორ მესიჯს, სათაურით
IndexOutOfBoundException.
სიდიდე- მასივი შეიცავს ზუსტად იმდენ ელემენტს
რამდენის შენახვაც გვსურს, ეს არის მისი სიდიდე, ის ვერ შეიცვლება, ვერ გაიზრდება,
ვერ დაპატარავდება, მაგრამ შესაძლებელია არსებული
ელემენტების ცვლა, პირველ პოზიციაზე თუ გვაქ
ციფრი 7 , შეგვიძლია შევცვალოთ ნებისმიერი სხვა ციფრით.
ძირითადი წესი რომელიც მასივს გააჩნია:
ის მუშაობს ერთი და იგივე ტიპის ცვლადებთან, შეუძლებელია მოახდინოთ დეფინირება ინტეჯერის
და შეინახოთ სტრინგი, ჩარი და ა.შ. როგორც ესეთი შესაძლებელია ობიეკტური ტიპებით სხვა
და სხვა ცვლადების შენახვა ერთ მასივში მაგრამ ეგ მოგვიანებით.
მასივის სტანდარტული ღირებულება არის Null:
არსებობს ერთ განზომილებიანი, ორ განზომილებიანი
და მრავალ განზომილებიანი მასივი. ერთ განზომილებიან მასივს მათემატიკაში ვეკტორი ქვია,
2 განზომილებიანს მატრიცა.
სხვაობა ერთ განზომილებიან და 2 განზომილებიან
მასივს შორის არის ის რომ ორ განზომილებიანი მასივი ინახავს მასივებს, ანუ მასივი მასივში.
მას გააჩნია დიაგონალი და ვერტიკალი. ასე გამოიყურება
დეფინირება :
- Int [] anArray - ერთ განზომილებიანი:
- Int [] [] anArray - ორ განზომილებიანი:
- Int [] [] [] anArray - მრავალ განზომილებიანი:
რომელიმე გვერდზე შეიძლება წააწყდეთ დეფინირების
მსგავს სტილს int anArray [] სადც ლიტერალები მოთავსებულია ბოლოში, ეს სრულიად მართებული
დეფინირება არის და ჯავამ ის მართებულად ცნო იმისთვის რომ მოეზიდა მომხმარებლები სხვა
და სხვა ენებისგან, როგორიც არის c++, c# და ა.შ მაგრამ ჯავას ლიტერალი არის Int []
anArray სადაც
ლიტერალი შუაშია მოქცეული ტიპსა დ ცვლადს შორის.
წარმოდგენა თუ გაგიჭირდთ რა არის მასივი
უყურეთ მას როგორც ჩანთას, (თუ მოსწავლე ხართ) სადაც უამრავი წიგნი გიდევს, ან ყუთს
(თუ მუშა ხართ) სადც უამრავი ხელსაწყო გიდევს, რომლის გამოყენებასაც ახდენთ ეფეკტურად.
არსებობს დეფინირების სხვა სტილიც. მაგალითად
გვინდა შევქმნათ მასივი 5 ელემენტით, String [] names = new
String [5]; სადაც ყველა სახელის შეყვანა მოგვიწევს
პოზიციებზე. შორთქათით დეფინირება ხდება შემდეგნაირად, String [] names = {“გიორგი”,
„ლაშა“, „დათო“, „ანა“, „მარია“}; ასე დეფინირება უფრო მოსახერხებელია, კოდი უფრო წაკითხვადია
და დეფინირება ხდება პროცესში. როგორც ნახეთ
{} გამოიყენება როგორც ლიტერალი, გახსოვთ ალბათ რო ის ასევე ახდენს ბლოკირებას, (აზრების
გრუპირებას) მაგრამ მასივის შემთხვევაში ის უბრალოდ ლიტერალია და იწერება ერთ ველზე.
ელემენტებთან წვდომა:
შესაძლებელია მოვახდინოთ ელემენტებთან წვდომა
როგორც წაკითხვის ისე დაწერის მიზნით, წაკითხვა
როგორც მაღლა ავღნიშნეთ ხდება ინდექსის გამოძახებით anArray[0], რის
შემდგომაც დაგვიბრუნდება შედეგი პირველი პოზიციიდან.
თუ გვუსრს დაწერა არსებულ ინდექსზე. მაშინ
გამოვიძახებთ ინდექს და პირდაპირ შეუცვლით ღირებულებას, თუ anArray[0] =
7; იგივე ინდექს anArray[0]=
12; გახდება 12;
შესაძლებელია მთლიანი მასივის წაკითხვაც, length:დანართის დახმარებით.
რომელიც ეკრანზე გამოგვიტანს ყველა ელემენტს, რომელიც მასივში იმყოფება.
როგორც შეამჩნევდით length არის ფრჩხილების () გარეშე, იგივე
ფუნქციას ფრჩხილებით String იყენებს, ბევრი დამწყები პროგრამისტი
უშვებს ამ შეცდომას, (length: - Array. length() -String).
მასივის წაკითხვა ასევე შესაძლებელია, Arrays.toString() მეთოდის დახმარებით, პირდაპირ კომპილირების დროს. მისი გამოყენება თუ გსურთ უნდა მოახდინოთ იმპორტირება Arrays. (import java.util.Arrays;)
მასივს გააჩნია უამრავი გამოსადეგი მეთოდი, რომელიც ხელს გვიწყობს სხვა და სხვა ოპერაციების წარმოებაში. ესენია: sort(), remove(), addAll(), copyFrom(), copyTo() და ა.შ მათ ათვისებას და გამოყენებას კოდის წერის დროს შეძლებთ. ამ ბლოგში მეთოდებს არ განვიხილავთ.
2 განზომილებიანი მასივი:
როდესაც ვახდენთ ორ განზომილებიანი მასივის შექმნას, ვქმნით დიაგონალს და ვერტიკალს. ელემენტებზე წვდომა ხდება ორი ინდექსით რადგან ელენეტი მასივში მაღლივის და განივის კვეთაზე იმყოფება.
3 არის დიაგონალი და 4 არის ვერტიკალი, ელემენტის შეყვანა პოზოციაზე ორი ინდექსის მეშვეობით ხდება. მაგალითი : matrix[1][2] = 25; ელემენტებს შორის შესაძლებელია ნებისმიერი ოპერაციის წარმოება. გამრავლება, გაყოფა, მიმატება, გამოკლება და ა.შ ორ განზომილებიანი მასივის დეფინირება შესაძლებელია {} ფრჩხილებით, მსგავსად ერთ განზომილებიანისა. შემდეგ ფოტოზე ნახავთ
მასივს, რომელიც ინახავს მასივებს. ახდენთ დიაგონალის დეფინირებას და ვერტიკალის დეფინირება ხდება სათითაოდ. იგივე ოპერაცია {} გამოყენებით შემდეგნაირად გამოიყურება.
მასივების წაკითხვა თითქმის შეუძლებელია, for loop-ის გარეშე. არსებობს სხვა და სხვა ხერხებიც წაკითხვის მაგრამ for loop მათ შორის ყველაზე გამოყენებადია.
მაგალითები: ერთ განზომილებიანი მასივი.
კომპილირების შემდგომ:
ყველაზე გავრცელებული შეცდომა დამწყებ პროგრამისტებში არის არ არსებული ელემენტის გამოძახება. რომლის სახელიც მაღლა წერია:მაგალითი:
მოვახდინეთ მესამე ელემენტის გამოძახება რომელიც არ არსებობს, შედეგად კომპილატორმა
მოგვაწოდა ერორ მესიჯი, ხშირ შემთხვევაში მსგავსი შეცდომა პროგრამისტების დამსახურება გახლავთ, მაგრამ არის შემთხვევა როდესაც მასივის შევსებას მომხმარებლისგან ვცდილობთ, რის შემდგომაც მომხმარებელი იძახებს იმ ელემენტს რომელიც ჭირდება. ხშირს შემთხვევაში გამოძახებული ელემენტი არ არსებობს, რასაც იგივე შედეგი მოყვება ხოლმე, ამიტომ არსებობს ძალიან კარგი ხელსაწყო ჯავაში რომელიც ერორებს უმკლავდება და მას Exception ქვია, ახლა არ ვისაუბრებთ Error Handling-ზე. ერთ მაგალითს ვნახავთ რო წარმოდგენა შეგვექმნეს რასთან გვაქ საქმე.
ვიძახებთ არ არსებულ ელემენტს, მაგრამ Exception-ის დახმარებით პროგრამა პრობელამს უმკლავდება, ის არ წყვეტს მუშაობას და გვეუბნება სად არის შეცდომა. public static void main-ის გასვრივ ხედავთ throws საკვანძო სიტყვას რის მეშვეობითაც მანქანას ვეუბნებით რო პროგრამას შესაძლებელია შეცდომები ექნეს და აუცილებელია მას გაუმკლავდეთ. გამკლავების უამრავი გზა და ხერხი არსებობს, ფოტოზე ერთ-ერთია ნაჩვენები. Exception არის უზარმაზარი პაკეტი, უამრავი სასარგებლო ხელსაწყოთი, რომელიც თითქმის ყველაფერს უმკლავდება, სკრინზე ნახეთ კომპილირების შემდგომ როგორ აგრძელებს პროგრამა მუშაობას.
პატარა მაგალითებზე საკმაოდ მარტივად გამოიყურება მასივი, მაგრამ წარმოიდგინე გაქვთ მასივი N რაოდენობის ელემენტით, როგორ გინდათ მონახოთ მსგავს მასივში სასურველი ელემენტი, ვთქვათ მუშაობთ დიდ კომპანიაში სადაც მოსანახი გაქვთ ინფორმაცია მასივში, ქექვას ხომ არ დავიწყებთ და სათითაოდ ხომ არ გამოვიტანთ ეკრანზე მილიონობით ინფორმაციას? (ამის აუცილებლობა არ არის, მსგავსი რამ სამსახურიდან დათხოვნით სრულდება ხოლმე), რომც გამოვიტანოთ ბევრი კომპიუტერი მსგავს ოპერაციას ვერც გაუძლებს, თუ გაუძლო შედეგი რამოდენიმე საათში დადგება მინიმუმ, ან რამოდენიმე დღეში. ამიტომ მინიმუმ საჭიროა იცოდეთ დასახელება ან ღირებულება ელემენტის. არის სიტუაცია როდესაც იცით დასახელება და მოთხოვნა არის გაიგოთ ადგილმდებარეობა დასახელებული ობიეკტის, არის შემთხვევა როდესაც დასახელებაც იცით და ინდექსიც მაგრამ თქვენი ამოცანა არის ელემენტი 1678 პოზიციიდა გადასვათ 569 პოზიციაზე, როგორ უნდა გადასვათ როდესაც ადგილი უკვე დაკავებულია? როგორ უნდა მოვახდინოთ მთლიანი მასივის რევერსირება? ან თუნდაც რამოდენიმე ელემენტის რევერსირება, ამ და უამრავ მსგავს კითხევბზე პასუხი მუდმივად მზად უნდა გქონდეთ, მზა პასუხის ქონაში ოპერატორების და Conditional Statements and loops კარგად ცოდნა დაგეხმარებათ.
შევქმნათ მასივი და მოვნახოთ სასურველი ელემენტების ინდექსები.
შევქმენით ორი მასივი, ერთი გახლავთ ნუმერაციული, მეორე ალფავიტური, ორივე მასივში მოვნახეთ სასურველი ელემენტი და ელემენტის ინდექსი, შემდეგ მოვნახეთ მინიმალური, მაქსიმალური, საშუალო და შუაში მდგომი ელემენტებიც. კომპილირების შემდგომ:
ამით ერთ განზომილებიან მასივზე საუბარი მორჩა. ვნახოთ 2 განზომილებიანის მაგალითიც.
მოვახდინეთ ორი ინდენტური 2 განზომილებიანი მასივის შექმნა, რომლებიც შევადარეთ. Arrays.deepEquals() მეთოდის მეშვეობით. ის ძირითადად გამოიყენება ორ განზომილებიანი და ობიეკტური მასივების შედარებისთვის. ერთ განზომილებიანი მასივის შედარება ხდება Arrays.equals() მეთოდის მეშვეობით. კომპილირების შემდგომ:
ამით მასივებზე საუბარს მოვრჩით:
მასივს გააჩნია უამრავი გამოსადეგი მეთოდი, რომელიც ხელს გვიწყობს სხვა და სხვა ოპერაციების წარმოებაში. ესენია: sort(), remove(), addAll(), copyFrom(), copyTo() და ა.შ მათ ათვისებას და გამოყენებას კოდის წერის დროს შეძლებთ. ამ ბლოგში მეთოდებს არ განვიხილავთ.
2 განზომილებიანი მასივი:
როდესაც ვახდენთ ორ განზომილებიანი მასივის შექმნას, ვქმნით დიაგონალს და ვერტიკალს. ელემენტებზე წვდომა ხდება ორი ინდექსით რადგან ელენეტი მასივში მაღლივის და განივის კვეთაზე იმყოფება.
3 არის დიაგონალი და 4 არის ვერტიკალი, ელემენტის შეყვანა პოზოციაზე ორი ინდექსის მეშვეობით ხდება. მაგალითი : matrix[1][2] = 25; ელემენტებს შორის შესაძლებელია ნებისმიერი ოპერაციის წარმოება. გამრავლება, გაყოფა, მიმატება, გამოკლება და ა.შ ორ განზომილებიანი მასივის დეფინირება შესაძლებელია {} ფრჩხილებით, მსგავსად ერთ განზომილებიანისა. შემდეგ ფოტოზე ნახავთ
მასივს, რომელიც ინახავს მასივებს. ახდენთ დიაგონალის დეფინირებას და ვერტიკალის დეფინირება ხდება სათითაოდ. იგივე ოპერაცია {} გამოყენებით შემდეგნაირად გამოიყურება.
მასივების წაკითხვა თითქმის შეუძლებელია, for loop-ის გარეშე. არსებობს სხვა და სხვა ხერხებიც წაკითხვის მაგრამ for loop მათ შორის ყველაზე გამოყენებადია.
მაგალითები: ერთ განზომილებიანი მასივი.
კომპილირების შემდგომ:
ყველაზე გავრცელებული შეცდომა დამწყებ პროგრამისტებში არის არ არსებული ელემენტის გამოძახება. რომლის სახელიც მაღლა წერია:მაგალითი:
მოვახდინეთ მესამე ელემენტის გამოძახება რომელიც არ არსებობს, შედეგად კომპილატორმა
მოგვაწოდა ერორ მესიჯი, ხშირ შემთხვევაში მსგავსი შეცდომა პროგრამისტების დამსახურება გახლავთ, მაგრამ არის შემთხვევა როდესაც მასივის შევსებას მომხმარებლისგან ვცდილობთ, რის შემდგომაც მომხმარებელი იძახებს იმ ელემენტს რომელიც ჭირდება. ხშირს შემთხვევაში გამოძახებული ელემენტი არ არსებობს, რასაც იგივე შედეგი მოყვება ხოლმე, ამიტომ არსებობს ძალიან კარგი ხელსაწყო ჯავაში რომელიც ერორებს უმკლავდება და მას Exception ქვია, ახლა არ ვისაუბრებთ Error Handling-ზე. ერთ მაგალითს ვნახავთ რო წარმოდგენა შეგვექმნეს რასთან გვაქ საქმე.
ვიძახებთ არ არსებულ ელემენტს, მაგრამ Exception-ის დახმარებით პროგრამა პრობელამს უმკლავდება, ის არ წყვეტს მუშაობას და გვეუბნება სად არის შეცდომა. public static void main-ის გასვრივ ხედავთ throws საკვანძო სიტყვას რის მეშვეობითაც მანქანას ვეუბნებით რო პროგრამას შესაძლებელია შეცდომები ექნეს და აუცილებელია მას გაუმკლავდეთ. გამკლავების უამრავი გზა და ხერხი არსებობს, ფოტოზე ერთ-ერთია ნაჩვენები. Exception არის უზარმაზარი პაკეტი, უამრავი სასარგებლო ხელსაწყოთი, რომელიც თითქმის ყველაფერს უმკლავდება, სკრინზე ნახეთ კომპილირების შემდგომ როგორ აგრძელებს პროგრამა მუშაობას.
პატარა მაგალითებზე საკმაოდ მარტივად გამოიყურება მასივი, მაგრამ წარმოიდგინე გაქვთ მასივი N რაოდენობის ელემენტით, როგორ გინდათ მონახოთ მსგავს მასივში სასურველი ელემენტი, ვთქვათ მუშაობთ დიდ კომპანიაში სადაც მოსანახი გაქვთ ინფორმაცია მასივში, ქექვას ხომ არ დავიწყებთ და სათითაოდ ხომ არ გამოვიტანთ ეკრანზე მილიონობით ინფორმაციას? (ამის აუცილებლობა არ არის, მსგავსი რამ სამსახურიდან დათხოვნით სრულდება ხოლმე), რომც გამოვიტანოთ ბევრი კომპიუტერი მსგავს ოპერაციას ვერც გაუძლებს, თუ გაუძლო შედეგი რამოდენიმე საათში დადგება მინიმუმ, ან რამოდენიმე დღეში. ამიტომ მინიმუმ საჭიროა იცოდეთ დასახელება ან ღირებულება ელემენტის. არის სიტუაცია როდესაც იცით დასახელება და მოთხოვნა არის გაიგოთ ადგილმდებარეობა დასახელებული ობიეკტის, არის შემთხვევა როდესაც დასახელებაც იცით და ინდექსიც მაგრამ თქვენი ამოცანა არის ელემენტი 1678 პოზიციიდა გადასვათ 569 პოზიციაზე, როგორ უნდა გადასვათ როდესაც ადგილი უკვე დაკავებულია? როგორ უნდა მოვახდინოთ მთლიანი მასივის რევერსირება? ან თუნდაც რამოდენიმე ელემენტის რევერსირება, ამ და უამრავ მსგავს კითხევბზე პასუხი მუდმივად მზად უნდა გქონდეთ, მზა პასუხის ქონაში ოპერატორების და Conditional Statements and loops კარგად ცოდნა დაგეხმარებათ.
შევქმნათ მასივი და მოვნახოთ სასურველი ელემენტების ინდექსები.
შევქმენით ორი მასივი, ერთი გახლავთ ნუმერაციული, მეორე ალფავიტური, ორივე მასივში მოვნახეთ სასურველი ელემენტი და ელემენტის ინდექსი, შემდეგ მოვნახეთ მინიმალური, მაქსიმალური, საშუალო და შუაში მდგომი ელემენტებიც. კომპილირების შემდგომ:
ამით ერთ განზომილებიან მასივზე საუბარი მორჩა. ვნახოთ 2 განზომილებიანის მაგალითიც.
მოვახდინეთ ორი ინდენტური 2 განზომილებიანი მასივის შექმნა, რომლებიც შევადარეთ. Arrays.deepEquals() მეთოდის მეშვეობით. ის ძირითადად გამოიყენება ორ განზომილებიანი და ობიეკტური მასივების შედარებისთვის. ერთ განზომილებიანი მასივის შედარება ხდება Arrays.equals() მეთოდის მეშვეობით. კომპილირების შემდგომ:
ამით მასივებზე საუბარს მოვრჩით: