Salinan kode adalah sebagai berikut:
impor java.util.arrays;
/**
* Implementasi tabel linier berurutan
*/
Linelist kelas publik <E> {
Ukuran int pribadi; // panjang
objek pribadi [] array; // array yang mendasarinya
private final int default_length = 16; // panjang default
/**
* Metode konstruksi non-parameter
*/
linelist publik () {
ukuran = 0;
// Bangun array menggunakan panjang default
array = objek baru [default_length];
}
/**
* Tentukan panjang untuk konstruksi
* Panjang @param Tentukan panjang awal
*/
linelist publik (panjang int) {
if (length <0) {
Lempar IllegalArgumentException baru ("Panjang awal adalah ilegal:"+panjang);
}
// Bangun array dengan panjang yang ditentukan
array = objek baru [panjang];
}
/**
* Tentukan elemen inisialisasi dan panjang untuk konstruksi
* @param elemen inisialisasi elemen
* Panjang inisialisasi panjang @param
*/
linelist publik (elemen e, panjang int) {
if (panjang <1) {
Lempar IllegalArgumentException baru ("Panjang awal adalah ilegal:"+panjang);
}
// Bangun array dengan panjang yang ditentukan
array = objek baru [panjang];
// inisialisasi elemen pertama
array [0] = elemen;
ukuran ++;
}
/**
* Tentukan elemen inisialisasi untuk konstruksi
* @param elemen inisialisasi elemen
*/
linelist publik (elemen e) {
// inisialisasi array dengan panjang default
array = objek baru [default_length];
// inisialisasi elemen pertama
array [0] = elemen;
}
/**
* Dapatkan jumlah elemen
*/
ukuran int int () {
ukuran pengembalian;
}
/**
* Tentukan apakah itu kosong
*/
public boolean isEmpty () {
ukuran pengembalian == 0;
}
/**
* Tentukan apakah elemen ini disertakan
*/
Boolean publik berisi (e e) {
if (indexof (e) == -1) {
mengembalikan false;
}
Kembali Benar;
}
/**
* Format sebagai array
*/
objek publik [] toarray () {
return arrays.copyof (array, ukuran);
}
/**
* Tambahkan elemen ke ekor tabel linier
* @param e
* @kembali
*/
public void add (e e) {
ExtentCapacity (ukuran+1);
array [ukuran] = e;
ukuran ++;
}
/**
* Perluas kapasitas
* @param panjang panjang yang dibutuhkan
*/
Private Void Extendcapacity (panjang int) {
// Panjang array saat ini dan panjang yang dibutuhkan harus maksimal
int cincapacity = math.max (array.length, length);
// menilai apakah perluasan kapasitas diperlukan
if (Mincapacity - array.length> 0) {
// Panjang array meningkat setengahnya
int newlength = array.length + array.length/2;
// Jika panjang baru lebih kecil dari persyaratan, gunakan panjang yang diperlukan sebagai panjang array
if (newLength <Minsapacity) {
newLength = mincapacity;
}
// Panjang array tidak dapat melebihi integer.max_value
if (newLength> integer.max_value - 8) {
newLength = integer.max_value;
}
// Ekspansi array
array = arrays.copyof (array, newlength);
}
}
/**
* Hapus semua elemen ini dari tabel linier
* @param e elemen yang perlu dihapus
* @kembali
*/
public void removeall (e e) {
if (e == null) {
untuk (int i = 0; i <size; i ++) {
if (array [i] == null) {
fastremove (i);
}
}
}kalau tidak{
untuk (int i = 0; i <size; i ++) {
if (e.equals (array [i])) {
fastremove (i);
}
}
}
}
/**
* Hapus elemen di indeks, dan gerakkan elemen berikut pada gilirannya
* @param indeks indeks yang perlu dihapus
*/
private void fastremove (int index) {
if (size-index-1> 0) {
// Array mulai dari indeks+1 dan semua bergerak maju
System.ArrayCopy (array, indeks+1, array, indeks, ukuran-1);
}
// Harap kosongkan elemen terakhir
array [-size] = null;
}
/**
* Bersihkan tabel linier
*/
public void clear () {
// Isi semua array ke dalam nol
Arrays.fill (array, null);
// Ubah jumlah elemen menjadi 0
ukuran = 0;
}
/**
* Dapatkan elemen di indeks
* Indeks @param
* @return Element at Index
*/
@SuppressWarnings ("Uncecked")
public e get (int index) {
checkIndex (indeks);
return (e) array [indeks];
}
/**
* Verifikasi apakah indeks tidak ada batasan
* Indeks @param
*/
private void checkIndex (int index) {
if (index> = size || index <0) {
lempar indexOutofboundsException baru ("IndexOutBoundSException");
}
}
/**
* Ubah elemen pada indeks menjadi elemen baru
* posisi indeks indeks @param
* @param elemen
* @return elemen pada indeks asli
*/
@SuppressWarnings ("Uncecked")
public e set (int index, e elemen) {
checkIndex (indeks);
E e = (e) array [indeks];
array [index] = elemen;
mengembalikan e;
}
/**
* Masukkan elemen yang ditentukan pada indeks yang ditentukan
* posisi indeks indeks @param
* @param elemen
*/
public void add (int index, e elemen) {
// Verifikasi indeks
checkIndex (indeks);
// Apakah perlu memperluas kapasitas
ExtentCapacity (ukuran+1);
// Salin array
System.ArrayCopy (array, indeks, array, indeks+1, ukuran-indeks);
array [index] = elemen;
}
/**
* Hapus elemen di indeks
* indeks indeks @param
* @return elemen yang dihapus
*/
@SuppressWarnings ("Uncecked")
public e Remove (int index) {
checkIndex (indeks);
// Dapatkan elemen posisi indeks
E e = (e) array [indeks];
fastremove (indeks);
mengembalikan e;
}
/**
* Dapatkan indeks lokasi tempat elemen pertama kali muncul
* @param e elemen yang harus dicari
* @return jika itu -1, itu berarti tabel linier tidak memiliki elemen ini
*/
indeks int int publik (e e) {
if (e == null) {
untuk (int i = 0; i <size; i ++) {
if (e == array [i]) {
Kembalikan i;
}
}
}
untuk (int i = 0; i <size; i ++) {
if (e.equals (array [i])) {
Kembalikan i;
}
}
kembali -1;
}
/**
* Dapatkan indeks kejadian terakhir elemen
* @param e elemen yang harus dicari
* @return jika itu -1, itu berarti tabel linier tidak memiliki elemen ini
*/
publik int lastIndexof (e e) {
// menilai apakah elemennya nol
if (e == null) {
untuk (int i = size-1; i> = 0; i-) {
if (e == array [i]) {
Kembalikan i;
}
}
}
untuk (int i = size-1; i> = 0; i-) {
// Jika null, pengecualian nullpoint akan dijalankan di sini
// Jadi Anda perlu menambahkan verifikasi apakah itu nol
if (e.equals (array [i])) {
Kembalikan i;
}
}
kembali -1;
}
/**
* Mencegat tabel linier
* @param fromIndex Mulai pengindeksan
* @param toindex end index
* @return tabel linier yang dicegat
*/
@SuppressWarnings ("Uncecked")
Linelist publik <E> Sublist (int fromIndex, int toindex) {
// menilai apakah indeks awal di luar batas
if (fromIndex <0 || fromIndex> = size) {
lempar indexOutofboundsException baru ("Mulai indeks lintas batas:"+fromIndex);
}
// menilai apakah indeks akhir di luar batas
if (toIndex> = size || fromIndex <0) {
lempar indexOutofboundsException baru ("end index outbound:"+toindex);
}
// menilai apakah indeks awal dan indeks akhir benar
if (fromIndex> toIndex) {
Lempar IllegalArgumentException baru ("Parameternya salah, indeks awal harus lebih besar dari atau sama dengan indeks akhir");
}
Linelist <E> Daftar = Linelist baru <E> ();
untuk (int i = fromIndex, j = toIndex; i <= j; i ++) {
list.add ((e) array [i]);
}
daftar pengembalian;
}
}