国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java容器類研究2:List

zzzmh / 1983人閱讀

摘要:在中引入該方法,用來替換中的每個(gè)元素。的方法,只能在或之后使用,也就是確保當(dāng)前指向了一個(gè)存在的項(xiàng)。這里使用了,該方法可以將非對象先映射為型,然后進(jìn)行比較。存儲的是有序的數(shù)組,所以劃分時(shí)會按照順序進(jìn)行劃分。

java.util.List

replaceAll

在Java8中引入該方法,用來替換list中的每個(gè)元素。

    default void replaceAll(UnaryOperator operator) {
        Objects.requireNonNull(operator);
        final ListIterator li = this.listIterator();
        while (li.hasNext()) {
            li.set(operator.apply(li.next()));
        }
    }

Iterator的set方法,只能在next或previous之后使用,也就是確保當(dāng)前Iterator指向了一個(gè)存在的項(xiàng)。該方法使用很方便,使用lambda運(yùn)算可以很清晰的表達(dá)想要進(jìn)行的替換操作。

public class Ripper {
    public static void main(String[] args) {
        List numbers = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            numbers.add(i);
        }
        numbers.replaceAll(item -> item * item);
    }
}
sort
public class Ripper {
    public static void main(String[] args) {
        List numbers = new ArrayList<>();
        for (int i = 10; i > 0; i--) {
            numbers.add(i);
        }

        numbers.sort(Integer::compare);

        numbers.sort(null);

        numbers.sort((a, b) -> a - b);

        numbers.sort(Comparator.comparingInt(a -> a * a));
    }
}

同樣sort函數(shù)也是在1.8中引入,并且可以使用lambda表達(dá)式定義自己的比較規(guī)則,上面四種排序結(jié)果都是一樣的。這里使用了Comparator.comparingInt,該方法可以將非int對象先映射為int型,然后進(jìn)行比較。

具體實(shí)現(xiàn):

    default void sort(Comparator c) {
        Object[] a = this.toArray();
        Arrays.sort(a, (Comparator) c);
        ListIterator i = this.listIterator();
        for (Object e : a) {
            i.next();
            i.set((E) e);
        }
    }

這里首先將原來的list的copy為一個(gè)數(shù)組,然后再進(jìn)行排序,這里采用的是merge sort。為什么要先copy下來,排序完成后再設(shè)置原list?官方解釋是在原數(shù)組上進(jìn)行排序可能會導(dǎo)致n2log(n)的復(fù)雜度。

toArray函數(shù)將基于Collection的結(jié)構(gòu)轉(zhuǎn)化成了數(shù)組結(jié)構(gòu),這里的ListArray的toArray方法是淺拷貝,從下面例子可以看出:

public class Ripper {
    int value;

    public Ripper(int v) {
        value = v;
    }

    public static void main(String[] args) {
        List numbers = new ArrayList<>();
        for (int i = 10; i > 0; i--) {
            numbers.add(new Ripper(i));
        }
        Object[] array = numbers.toArray();
        array[0] = array[1];
        System.out.println(numbers.get(0).value);
        Ripper a1 = (Ripper) array[0];
        a1.value = 100;
        System.out.println(numbers.get(0).value);
        System.out.println(numbers.get(1).value);

    }
}

輸出是:

10
10
100

說明創(chuàng)建的array是指向一個(gè)新的數(shù)組對象,但是數(shù)組中每一項(xiàng)保留的引用是指向原來的對象的。

spliterator
    default Spliterator spliterator() {
        return Spliterators.spliterator(this, Spliterator.ORDERED);
    }

List存儲的是有序的數(shù)組,所以劃分時(shí)會按照順序進(jìn)行劃分。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/67707.html

相關(guān)文章

  • Java 基礎(chǔ) | Collection 集合概覽

    摘要:說到復(fù)盤基礎(chǔ),并不是所有的都會復(fù)盤,沒那個(gè)時(shí)間更沒那個(gè)必要。比如,一些基礎(chǔ)的語法以及條件語句,極度簡單。思前想后,我覺得整個(gè)計(jì)劃應(yīng)該從集合開始,而復(fù)盤的方式就是讀源碼。通常,隊(duì)列不允許隨機(jī)訪問隊(duì)列中的元素。 ?showImg(https://segmentfault.com/img/remote/1460000020029737?w=1080&h=711); 老讀者都知道,我是自學(xué)轉(zhuǎn)行...

    codergarden 評論0 收藏0
  • Java容器研究1:Collection

    摘要:集合類關(guān)系是和的父接口。相等必須是對稱的,約定只能和其它相等,亦然。和接口在中引入,這個(gè)單詞是和的合成,用來分割集合以給并行處理提供方便。這些并不立即執(zhí)行,而是等到最后一個(gè)函數(shù),統(tǒng)一執(zhí)行。 集合類關(guān)系: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ...

    AprilJ 評論0 收藏0
  • Java容器研究4:ArrayList

    摘要:顯然,開發(fā)人員認(rèn)為通過下標(biāo)遍歷的數(shù)組結(jié)構(gòu)更加高效。在進(jìn)行分裂時(shí),原始保留中部至末尾的元素,新的保留原起始位置到中部的元素。同樣,也會進(jìn)行重新賦值,使得在使用前與保持一致。在遍歷時(shí),會調(diào)用方法,將動作施加于元素之上。 java.util.ArrayList ArrayList繼承自AbstractList,AbstractList為隨機(jī)訪問數(shù)據(jù)的結(jié)構(gòu),如數(shù)組提供了基本實(shí)現(xiàn),并且提供了It...

    xfee 評論0 收藏0
  • Java容器研究5:LinkedList

    摘要:提供了順序訪問的方法,當(dāng)然,大部分方法都依賴于來實(shí)現(xiàn),所以將鍋甩給了子類。實(shí)現(xiàn)了自己的遍歷方法利用了鏈表結(jié)構(gòu)的特性,進(jìn)行遍歷。其中有如下屬性記錄遍歷狀態(tài)。該方法位于中到數(shù)組中這里返回的不是,其實(shí)是 java.util.LinkedList Java中有現(xiàn)成的隊(duì)列可以用嗎 有,就是LinkedList。LinkedList實(shí)現(xiàn)的接口如下,其實(shí)也可以當(dāng)做stack使用: public cl...

    frank_fun 評論0 收藏0
  • 容器之Collection、Iterable、List、Vector(Stack)分析(三)

    摘要:容器相關(guān)的操作及其源碼分析說明本文是基于分析的。通常,我們通過迭代器來遍歷集合。是接口所特有的,在接口中,通過返回一個(gè)對象。為了偷懶啊,底層使用了迭代器。即返回的和原在元素上保持一致,但不可修改。 容器相關(guān)的操作及其源碼分析 說明 1、本文是基于JDK 7 分析的。JDK 8 待我工作了得好好研究下。Lambda、Stream。 2、本文會貼出大量的官方注釋文檔,強(qiáng)迫自己學(xué)英語,篇幅...

    liaosilzu2007 評論0 收藏0

發(fā)表評論

0條評論

zzzmh

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<