java howto ArrayList push, pop, shift, dan unshift


89

Saya telah menentukan bahwa Java ArrayList.addmirip dengan JavaScriptArray.push

Saya terjebak dalam menemukan ArrayListfungsi yang mirip dengan berikut ini

  • Array.pop
  • Array.shift
  • Array.unshift Saya condong ke arah ArrayList.remove[At]

Jawaban:


145

ArrayListunik dalam standar penamaannya. Berikut persamaannya:

Array.push    -> ArrayList.add(Object o); // Append the list
Array.pop     -> ArrayList.remove(int index); // Remove list[index]
Array.shift   -> ArrayList.remove(0); // Remove first element
Array.unshift -> ArrayList.add(int index, Object o); // Prepend the list

Perhatikan bahwa unshifttidak menghapus elemen, tetapi menambahkan satu ke daftar. Perhatikan juga bahwa perilaku kasus sudut mungkin berbeda antara Java dan JS, karena masing-masing memiliki standarnya sendiri.


9
Jika Anda melakukan banyak "unshifting" tetapi tidak banyak mendapatkan indeks tengah, Anda mungkin menemukan ArrayList lebih rendah daripada LinkedList dalam hal waktu berjalan yang sebenarnya.
Patrick

sementara (Item item = items.remove (0)) {...} tidak setara dengan shift.
e-info128

Tentang apa .push?
jameshfisher

1
OP mengatakan ia tahu Array.push -> ArrayList.add, dan secara khusus bertanya tentang pop, shiftdan unshift. Membaca ini lagi, saya akan menambahkan lebih banyak penjelasan dan menambahkan .pushpada saat yang bersamaan.
Jon Egeland

Meski tidak ditanyakan, namun jawaban ini terasa belum lengkap tanpa menyebutkan kompleksitas fungsi-fungsi tersebut.
Jasper

25

Saya menghadapi masalah ini beberapa waktu lalu dan saya menemukan java.util.LinkedListyang terbaik untuk kasus saya. Ini memiliki beberapa metode, dengan penamaan berbeda, tetapi mereka melakukan apa yang dibutuhkan:

push()    -> LinkedList.addLast(); // Or just LinkedList.add();
pop()     -> LinkedList.pollLast();
shift()   -> LinkedList.pollFirst();
unshift() -> LinkedList.addFirst();

1
Mengapa ini tidak diterima ?! Catatan: LinkeListmenambahkan metode yang akan sangat tidak efisien pada ArrayList ke Listantarmuka, ini adalah apa yang saya bingung. Metode ini berasal dari antarmuka Dequedan Queueyang diimplementasikannya, tetapi ArrayListtidak.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

1
@CiroSantilli 新疆 改造 中心 六四 事件 法轮功 tapi seberapa tidak efisien?
Slava

@Slava O (n) vs O (1) untuk sisipan depan, yang sangat besar.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

3
@CiroSantilli 新疆 改造 中心 六四 事件 法轮功 O (n) dan O (1) hanyalah kompleksitas. Saya mendengar bahwa daftar tertaut bisa sangat lambat daripada daftar array bahkan untuk penyisipan / penghapusan. stackoverflow.com/questions/34170566/… Jadi saya bertanya-tanya, bagaimana dengan Java?
Slava

15

mungkin Anda ingin melihat-lihat java.util.Stackkelas. itu memiliki metode push, pop. dan menerapkan antarmuka Daftar.

Untuk shift / unshift, Anda bisa mereferensikan jawaban @ Jon.

namun, sesuatu dari ArrayList yang mungkin ingin Anda pedulikan, arrayList tidak disinkronkan. tapi Stack adalah. (sub-kelas Vektor). Jika Anda memiliki persyaratan thread-safe, Stack mungkin lebih baik daripada ArrayList.



Sayangnya, saya baru menyadari bahwa dalam kondisi kurang tidur saya tidak membaca setengah bagian terakhir.
MJ Rayburn

3

Jawaban Hebat oleh Jon .

Saya malas dan saya benci mengetik, jadi saya membuat contoh potong dan tempel sederhana untuk semua orang yang seperti saya. Nikmati!

import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) {

        List<String> animals = new ArrayList<>();

        animals.add("Lion");
        animals.add("Tiger");
        animals.add("Cat");
        animals.add("Dog");

        System.out.println(animals); // [Lion, Tiger, Cat, Dog]

        // add() -> push(): Add items to the end of an array
        animals.add("Elephant");
        System.out.println(animals);  // [Lion, Tiger, Cat, Dog, Elephant]

        // remove() -> pop(): Remove an item from the end of an array
        animals.remove(animals.size() - 1);
        System.out.println(animals); // [Lion, Tiger, Cat, Dog]

        // add(0,"xyz") -> unshift(): Add items to the beginning of an array
        animals.add(0, "Penguin");
        System.out.println(animals); // [Penguin, Lion, Tiger, Cat, Dog]

        // remove(0) -> shift(): Remove an item from the beginning of an array
        animals.remove(0);
        System.out.println(animals); // [Lion, Tiger, Cat, Dog]

    }

}

2

Library Underscore-java berisi metode push (values), pop (), shift (), dan unshift (values).

Contoh kode:

import com.github.underscore.U:

List<String> strings = Arrays.asList("one", "two", " three");
List<String> newStrings = U.push(strings, "four", "five");
// ["one", " two", "three", " four", "five"]
String newPopString = U.pop(strings).fst();
// " three"
String newShiftString = U.shift(strings).fst();
// "one"
List<String> newUnshiftStrings = U.unshift(strings, "four", "five");
// ["four", " five", "one", " two", "three"]
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.