ArrayListでのset(index、object)およびadd(index、object)/ Stack empty()メソッドとisEmpty()メソッド/ dequedequeの使用といくつかの原則

出典:
免責事項:私が誰かの権利を侵害した場合は、私に連絡してください。削除します。
専門家を歓迎して私にスプレーしてください。

ArrayList中セット(インデックス、オブジェクト)与追加(インデックス、オブジェクト)

set:
元のインデックス位置でオブジェクトを置き換えますadd:元のインデックス位置を後方に移動します

List list = new ArrayList();
list.add(index、obj);
index +1とindex +を置きます1つの要素が1ビット戻った後、elementData [i + 1] = elementData [i];
同様に、objをインデックス位置に配置します。
もちろん、このプロセスでは、インデックスの合理性とオーバーフローするかどうかを考慮する必要があります。

スタックのempty()メソッドとisEmpty()メソッド

配列に要素がない場合は、trueを返します。
配列に要素がある場合は、falseを返します。

Stackはクラスjava.util.Vectorのメソッドを継承します。これが
vector
ここに画像の説明を挿入
のメソッドです
。これStackのメソッドです。Stackのempty()関数は、vectorのsize()関数を呼び出し、それが空かどうかを判断します。
ここに画像の説明を挿入
要約:違いはないはずです

Dequeの使用といくつかの原則

参照:https://www.cnblogs.com/denglh/p/7911513.html

import java.util.Deque;
import java.util.LinkedList;

public class DequeTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        
        Deque<String> deque = new LinkedList<String>();
        deque.add("d");
        deque.add("e");
        deque.add("f");
        
        //从队首取出元素,不会删除
        System.out.println("队首取出元素:"+deque.peek());
        System.out.println("队列为:"+deque);
        
        //从队首加入元素(队列有容量限制时用,无则用addFirst)
        deque.offerFirst("c");
        System.out.println("队首加入元素后为:"+deque);
        //从队尾加入元素(队列有容量限制时用,无则用addLast)
        deque.offerLast("g");
        System.out.println("队尾加入元素后为:"+deque);
        
        //队尾加入元素
        deque.offer("h");
        System.out.println("队尾加入元素后为:"+deque);
        
        //获取并移除队列第一个元素,pollFirst()也是,区别在于队列为空时,removeFirst会抛出NoSuchElementException异常,后者返回null
        deque.removeFirst();
        System.out.println("获取并移除队列第一个元素后为:"+deque);
        
        //获取并移除队列第一个元素,此方法与pollLast 唯一区别在于队列为空时,removeLast会抛出NoSuchElementException异常,后者返回null
        deque.removeLast();
        System.out.println("获取并移除队列最后一个元素后为:"+deque);
        
        //获取队列第一个元素.此方法与 peekFirst 唯一的不同在于:如果此双端队列为空,它将抛出NoSuchElementException,后者返回null
        System.out.println("获取队列第一个元素为:"+deque.getFirst());
        System.out.println("获取队列第一个元素后为:"+deque);
        
        //获取队列最后一个元素.此方法与 peekLast 唯一的不同在于:如果此双端队列为空,它将抛出NoSuchElementException,后者返回null
        System.out.println("获取队列最后一个元素为:"+deque.getLast());
        System.out.println("获取队列第一个元素后为:"+deque);
        
        //循环获取元素并在队列移除元素
        while(deque.size()>0){
            System.out.println("获取元素为:"+ deque.pop()+" 并删除");
        }
        System.out.println("队列为:"+deque);
    }

}

出力

队首取出元素:d
队列为:[d, e, f]
队首加入元素后为:[c, d, e, f]
队尾加入元素后为:[c, d, e, f, g]
队尾加入元素后为:[c, d, e, f, g, h]
获取并移除队列第一个元素后为:[d, e, f, g, h]
获取并移除队列最后一个元素后为:[d, e, f, g]
获取队列第一个元素为:d
获取队列第一个元素后为:[d, e, f, g]
获取队列最后一个元素为:g
获取队列第一个元素后为:[d, e, f, g]
获取元素为:d 并删除
获取元素为:e 并删除
获取元素为:f 并删除
获取元素为:g 并删除
队列为:[]

継承関係は次のとおり
です。deque=> queue => collection = "Iterable 1.キューを使用する場合、LinkedListの代わりに新しいLinkedListが使用されたときに、dequeを使用して受信するのはなぜですか。
  回答:dequeには、LinkedListとArrayDequeの2つの実装があるため、キューインターフェイスを継承します。dequeを使用して受信するのは、アップキャストが原因です(サブクラスは親クラスに転送され、サブクラスの特別な機能は失われます)。試してみることができます。get()メソッドを使用してLinkedListを受け取ります。
2.実装が1つではなく、2つであるのはなぜですか?それらの間には常に違いがありますか?
  回答:ArrayDequeは、ヘッドポインタとテールポインタに基づいて実装されたDequeです。つまり、最初と最後の要素にはアクセスできません。イテレータを使用する場合は、前後に繰り返すことができます。
    ArrayDequeは通常、リンクリストキュー/両端キューよりも優れています。生成されるガベージの量は限られています(古い配列は拡張で破棄されます)。dequeを使用することをお勧めします。ArrayDequeをお勧めします。

おすすめ

転載: blog.csdn.net/qq_45531729/article/details/111381796