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.