JDK1 8 ArrayList原始碼剖析(二)

2021-08-13 20:20:45 字數 3011 閱讀 8471

jdk1.8中新增的特性:

1.void foreach(consumer super e> action):jdk8中新特性,對list中每個元素分別進行操作,如:

arraylistal = new arraylist<>();

al.add(0);

al.add(1);

al.add(2);

al.add(3);

al.foreach(line -> system.out

.println(line));

2.spliteratorspliterator():返回乙個並行迭代器

return

new arraylistspliterator<>(this, 0, -1, 0);

示例如下:

arraylista1 = new arraylist();

a1.add("asd");

a1.add("zxc");

a1.add("xfgj");

a1.add("asd");

spliteratorspliterator = a1.spliterator();

spliterator.foreachremaining(ele -> system.out

.print(ele + " "));

結果如下:

asd zxc xfgj asd
3.boolean removeif(predicate super e> filter):移除集合中滿足給定條件的所有元素。filter是令元素移除成功的條件過濾器,示例如下:

arraylista1 = new arraylist();

a1.add("asd");

a1.add("zxc");

a1.add("xfgj");

a1.add("adsw");

a1.foreach(element -> system.out

.print(element + " "));

system.out

.println();

a1.removeif(element -> element.startswith("a"));// 過濾掉以"a"開頭的元素

a1.foreach(element -> system.out

.print(element + " "));

system.out

.println();

predicatepredicate = (element) -> element.contains("j"); // 這裡單獨定義了過濾器

a1.removeif(predicate); // 過濾掉包含"j"的元素

a1.foreach(line -> system.out

.println(line)); // 輸出 zxc

4.void replaceall(unaryoperatoroperator):替換list中的元素

objects.requirenonnull(operator);

final int expectedmodcount = modcount;

final int size = this.size;

for (int i=0; modcount == expectedmodcount && i < size; i++)

if (modcount != expectedmodcount)

modcount++;

示例如下:

arraylista1 = new arraylist();

a1.add("asd");

a1.add("zxc");

a1.add("xfgj");

a1.add("asd");

a1.replaceall(element -> element.contains("a")?"111": "000");

a1.foreach(elemet -> system.out

.print(elemet + " "));

輸出結果如下:

111 000 000 111
5.void sort(comparator super e> c):用於list集合排序,使用了comparator比較器來比較,實現裡面的compare方法,compareto比較之後,返回的引數是int型別,0則表示相等,1表示大於,-1負數則表示小於。

@override

@suppresswarnings("unchecked")

public

void

sort(comparator super e> c)

modcount++;

}

示例如下:

arraylist<

string

> a1 =

new arraylist<

string

>();

a1.add("asd");

a1.add("zxc");

a1.add("xfgj");

a1.add("adsw");

a1.sort(new comparator<

string

>()

});a1.foreach(line -> system.out.print(line +

" "));

JDK1 8 ArrayList擴容機制原始碼分析

屬性 預設長度 private static final int default capacity 10 空陣列 有參構造器 private static final object empty elementdata 空陣列 無參構造器 private static final object def...

JDK1 8 ArrayList 擴容詳解

arraylist這個資料結構比較簡單,總體來說,arraylist 底層結構是陣列,他的很多方法都是從陣列上面演變而來的,下面分析下arraylist的擴容機制,每次在add 乙個元素時,arraylist都需要對這個list的容量進行乙個判斷。如果容量夠,直接新增,否則需要進行擴容。在1.8 a...

JDK1 8 ArrayList原始碼分析

設定初始容量 private static final int default capacity 10 空例項陣列 private static final object empty elementdata 預設大小的空例項陣列,在第一次呼叫ensurecapacityinternal方法中的 ca...