10 Ağustos 2023 Perşembe

Arrays.asList metodu

Giriş
İmzası şöyle.
List<T> asList (T...a);
Açıklaması şöyle
When we do Arrays.asList(array) it creates a fixed-size list backed by the specified array. We can’t modify it’s length thus adding or removing is not allowed. And also it is not copied or created, it is just view of the same array, so if you update the value of an element in the list it will also change the element in the original array.
Metod Arrays$ArrayList nesnesi döner. Bu metod Java 9 ile gelen List.of() metodu ile karşılaştırılabilir.

Örnek
Bellek alanı olarak belirtilen array'i kullanan read only bir liste döner.  Açıklaması şöyle
Returns a fixed-size list backed by the specified array.
Şöyle yaparız.
List<Integer> list = Arrays.asList(new Integer[desiredLength]);
Eğer array değişirse liste de değişir. Şöyle yaparız.
Integer[] array = {1,2,3};
List<Integer> list = Arrays.asList(array);
array[1] = 10;
System.out.println(list); // Prints [1, 10, 3]
Örnek - null eleman
null eleman olabilir. Şöyle yaparız.
List<Integer> list = Arrays.asList(1, 2, null); // OK
Dolayısıyla null araması yapılabilir. Şöyle yaparız.
List<Integer> list = Arrays.asList(1, 2, 3);
list.contains(null); // Return false
Örnek - farklı tipler
Şöyle yaparız.
List list1 = Arrays.asList(1L, 2.0F, "3");
var list2 = list1;
Örnek - farklı tipler
Elimizde şöyle bir kod olsun. Çıktı olarak Object[] alırız çünkü int[] ve String[]'in ortak tek atası Object[]'dir
System.out.println(Arrays.asList(false? new int []{2} :new String[]{"2"}));
Örnek - ekleme çıkarma
Bu listeye ekleme çıkarma işlemi yapılamaz yoksa UnsupportedExcetion fırlatılır. Elimizde altta Array kullanan bir liste olsun.
String[] arr = {"a", "b"};
List<String> list = Arrays.asList(array);
Bu listeye ekleme yaparsak exception fırlatılır. Şöyle yaparız.
try {
  list.add("c");
}
catch(UnsupportedOperationException e) {
  // Fixed-size
}
Eğer Arrays.asList()'in sonucuna da bir şey eklemek istersek şöyle yaparız.
List<Foo> list= new ArrayList<>(Arrays.asList(...));
Örnek - değiştirme
Liste'deki eleman değiştirilebilir. Şöyle yaparız.
List<Integer> list = Arrays.asList(1, 2, null);
list.set(1, 10); // OK
Örnek - array
Açıklaması şöyle
Arrays.asList(int[]) - will create a List<int[]>
Eğer T Object'ten kalıtan bir tipse, çoklu elemana sahip bir liste dönüyor. Eğer T primitive ise tek elemana sahip bir liste döner. Aşağıdaki kod bize List<char> değil, tek elemanı sahip List<char[]> döner.
char[] alpha = {...};
Arrays.asList(alpha)
Çözüm
Primitive tipleri nesne olarak geçeriz. Şöyle yaparız.
Integer[] array = {3, 2, 5, 4};

if (Arrays.asList(array).contains(3))
{
  System.out.println("The array contains 3");
}
Çözüm
asList yerine "double curly brace initialization" kullanılabilir. Şöyle yaparız.
List<String> list = new ArrayList<String>() {{
  add("one");
  add("two");
  add("three");
}};
Çözüm
Listeye çevirmek yerine direkt stream'e çeviririz. Şöyle yaparız.
Arrays.stream(array)

Hiç yorum yok:

Yorum Gönder