java howto ArrayList push, pop, shift ve unshift


89

Java'nın ArrayList.addJavaScript'e benzer olduğunu belirledimArray.push

ArrayListAşağıdakine benzer işlevler bulmaya takıldım

  • Array.pop
  • Array.shift
  • Array.unshift Eğiliyorum ArrayList.remove[At]

Yanıtlar:


145

ArrayListadlandırma standartlarında benzersizdir. İşte denklikler:

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

Not unshiftgelmez kaldırmak yerine bir element, ancak ekler listeye tane. Ayrıca, her birinin kendi standartları olduğundan, köşe durum davranışlarının Java ve JS arasında büyük olasılıkla farklı olacağını unutmayın.


9
Çok fazla "değiştirme" yapıyorsanız ancak orta indekslere pek ulaşamıyorsanız, ArrayList'in gerçek çalışma süreleri bakımından LinkedList'ten daha düşük olduğunu görebilirsiniz.
Patrick

while (Öğe öğesi = öğeler.remove (0)) {...} kaydırmaya eşdeğer değildir.
e-info128

Peki ya .push?
jameshfisher

1
OP bildiğini söyledi Array.push -> ArrayList.addve özellikle sorulduğunda pop, shiftve unshift. Bunu tekrar okurken .push, aynı zamanda daha fazla açıklama ekleyeceğim ve ekleyeceğim .
Jon Egeland

Sorulmamasına rağmen, bu cevap, bu işlevlerin karmaşıklığından söz edilmeden eksik geliyor.
Jasper

25

Bir süre önce bu sorunla karşı karşıya kalmıştım ve java.util.LinkedListdurumum için en iyisi olduğunu buldum . Farklı adlandırmalara sahip birkaç yöntemi vardır, ancak gerekeni yapıyorlar:

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

1
Bu neden kabul edilmiyor ?! Not: LinkeListçok verimsiz olur yöntemler ekler ArrayList için Listbu beni karıştı neydi arayüzüne. Bu yöntemler , uyguladığı ancak uygulamadığı Dequeve Queuearayüzlerinden gelir ArrayList.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

1
@CiroSantilli 新疆 改造 中心 六四 事件 法轮功 ama ne kadar verimsiz?
Slava

@Slava O (n) ve O (1), çok büyük olan ön kesici uç için.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

3
@CiroSantilli 新疆 改造 中心 六四 事件 法轮功 O (n) ve O (1) sadece karmaşıklıklardır. Bağlantılı listelerin, ekleme / silme işlemlerinde bile dizi listelerinden oldukça yavaş olabileceğini duydum. stackoverflow.com/questions/34170566/… Acaba Java ne olacak?
Slava

15

belki bir göz atmak istersiniz java.util.Stack. push, pop yöntemlerine sahiptir. ve List arayüzünü uyguladı.

shift / unshift için @ Jon'un cevabına başvurabilirsiniz.

ancak, umurumda isteyebilirsiniz ArrayList şey arrayList edilir değil senkronize. ama Stack öyle. (Vector alt sınıfı). İş parçacığı güvenli gereksiniminiz varsa, Stack ArrayList'ten daha iyi olabilir.



Benim hatam, uykusuzluk halimde son yarısını okumadığımı yeni fark ettim.
MJ Rayburn

3

Jon'dan Harika Cevap .

Yine de tembelim ve yazmaktan nefret ediyorum, bu yüzden benim gibi olan tüm diğer insanlar için basit bir kes ve yapıştır örneği yarattım. Zevk almak!

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

Alt çizgi-java kitaplığı push (değerler), pop (), shift () ve unshift (değerler) yöntemlerini içerir.

Kod örneği:

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"]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.