Rumah  >  Artikel  >  Java  >  [Kod Bandingkan] ArrayList lwn Collections.singletonList

[Kod Bandingkan] ArrayList lwn Collections.singletonList

WBOY
WBOYasal
2024-08-06 13:20:50361semak imbas

[Code Compare] ArrayList vs Collections.singletonList

Saya memulakan urutan baharu untuk membandingkan cara berbeza untuk mengekodkan fungsi yang sama. Dalam siaran ini, saya akan membandingkan dua kaedah biasa untuk membuat senarai ringkas dengan hanya satu elemen. Secara khususnya, saya akan memeriksa pembina pelaksanaan Senarai yang paling biasa digunakan dan Collections.singletonList, Kaedah Kilang yang mudah untuk mencipta senarai tidak berubah yang mengandungi satu elemen.

Senarai Tatasusunan

Setiap kali anda memulakan ArrayList tanpa menyatakan kapasiti awalnya, ia bermula dengan tatasusunan kosong. Apabila anda menambah elemen pertama, ArrayList mengubah saiz menggunakan algoritma yang agak rumit yang melibatkan penyalinan tatasusunan. Mari kita lihat struktur ArrayList:

  private static final int DEFAULT_CAPACITY = 10;
  private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

  public ArrayList() {
    this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
  }

  public boolean add(E e) {
    modCount++;
    add(e, elementData, size);
    return true;
  }

  private void add(E e, Object[] elementData, int s) {
    if (s == elementData.length)
        elementData = grow();
    elementData[s] = e;
    size = s + 1;
  }

  private Object[] grow() {
      return grow(size + 1);
  }

  private Object[] grow(int minCapacity) {
    return elementData = Arrays.copyOf(elementData,
                                      newCapacity(minCapacity));
  }

  private int newCapacity(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity + (oldCapacity >> 1);
    if (newCapacity - minCapacity 20b4a778e550e8be231e638f45c4e79b Senaraikan8742468051c85b06f0a0af9e3e506b5c singletonList(T o)

<h3>
  
  
  Penerangan
</h3>

<p>Kaedah ini mengembalikan senarai tidak berubah yang mengandungi hanya objek yang ditentukan. Diperkenalkan dalam Java 1.3, singletonList mempunyai beberapa kelebihan:</p>

<ol>
<li>
<strong>Pelaksanaan sebaris:</strong> Anda boleh memulakannya dengan elemen yang diingini dalam satu baris.</li>
<li>
<p><strong>Ketidakbolehubah:</strong> Mari kita lihat pelaksanaannya:<br>
</p>
<pre class="highlight java">private static class SingletonList<E> extends AbstractList<E>
    implements RandomAccess, Serializable {

  private final E element;

  SingletonList(E obj) {
    element = obj;
  }
  ...
}

Senarai Abstrak, yang diwarisi SingletonList, mentakrifkan semua kaedah boleh ubah seperti ini:

  public boolean add(E e) {
    add(size(), e);
    return true;
  }

  public void add(int index, E element) {
    throw new UnsupportedOperationException();
  }

  public E remove(int index) {
    throw new UnsupportedOperationException();
  }

  public E set(int index, E element) {
      throw new UnsupportedOperationException();
  }

Ini memastikan bahawa adalah mustahil untuk melaungkan saiz senarai atau kandungan elemen tunggalnya.

Ketidakbolehubahan ialah ciri yang sangat berfaedah. Walaupun saya tidak akan membincangkannya di sini, pembangun yang berminat boleh mengetahui lebih lanjut daripada artikel ini.

  • Peruntukan Memori: Kelas SingletonList mengandungi hanya satu medan mudah untuk menampung elemen tunggal, tidak seperti ArrayList, yang menggunakan tatasusunan yang, menggunakan pembina ringkas ArrayList ringkas, akan meninggalkan kita dengan tatasusunan dengan saiz 10 selepas penambahan elemen.

  • Penggunaan CPU: Pembina SingletonList menerima elemen tunggal sebagai parameter, tidak memerlukan saiz semula, salinan tatasusunan atau manipulasi. Ini jauh lebih cekap berbanding kaedah tambah ArrayList.

  • Kesimpulan

    Dalam siaran ini, kami membandingkan dua cara untuk membuat senarai ringkas dengan satu elemen: menggunakan kaedah ArrayListconstructor dan Collection.singletonList. Walaupun ArrayList ialah struktur data yang fleksibel dan biasa digunakan, ia disertakan dengan beberapa overhed yang tidak perlu, terutamanya dari segi peruntukan memori dan penggunaan CPU semasa menambah elemen. Overhed ini termasuk mengubah saiz dan menyalin tatasusunan, yang boleh menjadi berlebihan untuk senarai yang bertujuan untuk memegang hanya satu elemen. Walau bagaimanapun, jika anda perlu menukar elemen ini, ArrayList ialah penyelesaian yang sesuai.

    Sebaliknya, Collection.singletonList menawarkan alternatif yang lebih cekap untuk mencipta senarai elemen tunggal. Kaedah ini bukan sahaja lebih ringkas dan lebih mudah digunakan tetapi juga memastikan kebolehubahan, yang boleh menjadi kelebihan ketara dalam banyak senario. Ia mempunyai jejak memori yang minimum dan hampir tidak memerlukan sumber CPU berbanding ArrayList.

    Ringkasnya, untuk senarai ringkas dan tidak berubah yang mengandungi hanya satu elemen, Collection.singletonList ialah pilihan terbaik kerana kecekapan, kesederhanaan dan kebolehubahannya. Walau bagaimanapun, jika anda perlu mengubah suai elemen dalam senarai, ArrayList boleh menjadi pilihan yang lebih sesuai.

    Pada catatan seterusnya saya akan membandingkan alternatif lain untuk senarai elemen tunggal: Senarai kaedah kilang. Jumpa anda nanti!

    Atas ialah kandungan terperinci [Kod Bandingkan] ArrayList lwn Collections.singletonList. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Artikel sebelumnya:Perakam Penerbangan Java (JFR)Artikel seterusnya:Perakam Penerbangan Java (JFR)