Aşağıdakı nümunələrdə istifadə olunacaq E
class adıdır. ArrayList toString()
metodunu implement edir, ona görə də massivlərdən fərqli olaraq listləri toString()
metodundan istifadə etməklə print edib normal görünüşdə baxa bilərik.
İndi isə əsas metodlara baxaq:
add()
The method signature:
boolean add(E element)
void add(int index, E element)
boolean add()
geriyə həmişə true
qaytarır.
Nümunə:
ArrayList<String> cars = new ArrayList<>(); cars.add("bmw"); cars.add(Boolean.TRUE); // does not compile
Generic tipi String
olduğundan başqa tipdə dəyişən qəbul etmir. Amma generic ilə non-generic`i mix edəndə compile səhvi vermir, sadəcə xəbərdarlıq (warning) verir
ArrayList cars = new ArrayList<String>(); cars.add("bmw"); cars.add(Boolean.TRUE);
Başqa nümunəyə baxaq:
List<String> cars = new ArrayList(); cars.add("bmw"); // [bmw] cars.add(1, "mercedes"); // [bmw, mercedes] cars.add(0, "kia motors"); // [kia motors, bmw, mercedes] cars.add(1, "toyota"); // [kia motors, toyota, bmw, mercedes] System.out.println(cars); // [kia motors, toyota, bmw, mercedes]
Əgər hər hansısa indeksə yeni element əlavə etmək istəyirsinizsə, o zaman əlavə etmək istədiyiniz indeksin maksimum nömrəsi listin ölçüsünə (size) bərabər olmalıdır, əks halda IndexOutOfBoundsException
verəcək. Yəni əlavə etmək istədiyiniz indeksdən əvvəlki indeksdə mütləq element olmalıdır.
cars.add(5, "moskvich"); // throws IndexOutOfBoundsException
Aşağıdakı nümunəni run etsək, ekrana “1 ” çap olunacaq, amma break
ifadəsini kommentə salsaq NullPointerException
baş verəcək. Exceptionun baş verməməsi üçün x
dəyişəninin tipini Integer
edə bilərik. Bu zaman ekrana çap olunan yazı belə olacaq: 1 null 3
List<Integer> list = new ArrayList<>(); list.add(1); list.add(null); list.add(3); for (int x : list) { System.out.print(x + " "); break; }
remove()
The method signature:
boolean remove(Object object)
E remove(int index)
Birinci metod ArrayList`də göndərilən object`ə uyğun gələn birinci elementi silir və nəticə olaraq geriyə true
qaytarır. Yox əgər həmin element listdə mövcud deyilsə, geriyə false
qaytarır.
İkinci metod göndərilən indeksdə olan elementi silir və geriyə sildiyi indeksdə mövcud olan elementi qaytarır. Əgər həmin indeks listin ölçüsündən böyük olarsa exception baş verir.
List<String> cars = new ArrayList(); cars.add("bmw"); // [bmw] cars.add("mercedes"); // [bmw, mercedes] cars.add("bmw"); // [bmw, mercedes, bmw] System.out.println(cars.remove("toyota")); // false System.out.println(cars.remove("bmw")); // true System.out.println(cars.remove(0)); // mercedes System.out.println(cars); // [bmw]
Bu metod ilə bağlı ən çaşdırıcı nümunələr adətən aşağıdakı formada olur. Sizcə nə çap olunacaq?
List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.remove(1); System.out.println(list);
Göründüyü kimi listə 1 və 2 rəqəmləri əlavə edilir və sonra remove
metodu çağırılır. Bu proseslərdən sonra ağıla ilk gələn fikir o olur ki, 1 silinir və 2 qalır. Son olaraq da 2 çap olunur. Amma əslində elə deyil. remove()
overload metod olduğundan, overload qaydalarına görə (bu barədə chapter 4’də məlumat veriləcək) yuxarıda “signature”də göstərilən 2-ci metod çağırılır. Ona görə də bu nümunədəki remove
metodu elementin dəyərini deyil, onun indeksini göstərir. Bu səbəbdən 1-ci indeksdəki element (2) silinir. Əgər 1 dəyərinin silinməsini istəyiriksə, o zaman remove metodunu aşağıkı formada yazmalıyıq:
list.remove(new Integer(1));
set()
The method signature:
E set(int index, E newElement)
Bu metod ArrayList`in qeyd olunmuş indeksdəki elementini newElement
ilə əvəz edir və geriyə əvəz edilmiş yeni elementi qaytarır. Bu zaman listin ölçüsü dəyişilmir.
List<String> cars = new ArrayList(); cars.add("ford"); // [ford] System.out.println(cars.size()); // 1 cars.set(0, "honda"); // [honda] System.out.println(cars.size()); // 1 cars.set(1, "lada"); // throws IndexOutOfBoundsException
isEmpty() and size()
The method signature:
boolean isEmpty()
int size()
Nümunə:
System.out.println(cars.isEmpty()); // true System.out.println(cars.size()); // 0 cars.add("nissan"); cars.add("ferrari"); System.out.println(cars.isEmpty()); // false System.out.println(cars.size()); // 2
clear()
The method signature:
void clear()
Nümunə:
ArrayList<String> cars = new ArrayList<>(); cars.add("infiniti"); // [infiniti] cars.add("mazda"); // [infiniti, mazda] cars.clear(); // []
contains()
The method signature:
boolean contains(Object object)
Nümunə:
ArrayList<String> cars = new ArrayList<>(); cars.add("kamaz"); // [kamaz] System.out.println(cars.contains("kamaz")); // true System.out.println(cars.contains("maz")); // false
Bu metod uyğunluq olub olmadığını yoxladığına görə hər element üçün equals()
metodunu çağırır.
equals()
The method signature:
boolean equals(Object object)
ArrayList equals()
metodunu implement/override edir (birbaşa deyil, dolayı yol ilə), ona görə də iki listdə eyni elementlərin eyni ardıcıllıqda gəlib gəlmədiyini müqayisə etmək olar.
Nümunə:
List<String> one = new ArrayList<>(); List<String> two = new ArrayList<>(); System.out.println(one.equals(two)); // true one.add("a"); // [a] System.out.println(one.equals(two)); // false two.add("a"); // [a] System.out.println(one.equals(two)); // true one.add("b"); // [a, b] two.add(0,"b"); // [b, a] System.out.println(one.equals(two)); // false,ardıcıllıq fərqli olduğuna görə
sublist()
The method signature:
List<E> subList(int fromIndex, int toIndex)
Geriyə yeni list qaytarır. fromIndex
daxildir, toIndex
daxil deyil.
Nümunə:
List s1 = new ArrayList( ); s1.add("a"); s1.add("b"); s1.add(1, "c"); List s2 = new ArrayList(s1.subList(1, 2)); s1.addAll(s2); System.out.println(s1); // [a, c, b, c]
String
, StringBuilder
və ArrayList
metodlarını suallarda tez-tez bir-biri ilə qarışdırırdım, hansı metodun hansı class’a aid olduğunu həmin vaxt dəqiq xatırlaya bilmirdim və bu da səhv cavablarla nəticələnirdi. Bu hal bir neçə dəfə təkrarlandığı üçün həmin metodları cədvəl şəklində qruplaşdırdım. Cədvəldə əsasən imtahanda düşən metodlar qeyd olunub. Eyni sətirdə qeyd olunan metodlar mahiyyət baxımından təxminən bir-biri ilə eyni işi görürlər.
String | StringBuilder |
ArrayList |
concat() | append(), insert() | add() |
replace() (2 parametrli) | replace() (3 parametrli) | set() |
length() | length() | size() |
deleteCharAt() | remove() | |
delete() | clear() | |
equals(), equalsIgnoreCase() | equals() | |
contains() | contains() | |
isEmpty() | ||
charAt() | charAt() | |
indexOf() | indexOf() | |
substring() | substring() | |
toLowerCase() | ||
toUpperCase() | ||
startWith() | ||
endWith() | ||
trim() | ||
reverse() | ||
toString() |
[topics lang=az]