Pada dasarnya teman saya telah mengatakan bahwa saya dapat membuat kode saya lebih pendek dengan menggunakan cara yang berbeda untuk memeriksa apakah sebuah array int berisi int, meskipun dia tidak akan memberi tahu saya apa itu: P.
Arus:
public boolean contains(final int[] array, final int key) {
for (final int i : array) {
if (i == key) {
return true;
}
}
return false;
}
Saya juga mencoba ini, meskipun selalu mengembalikan false karena beberapa alasan.
public boolean contains(final int[] array, final int key) {
return Arrays.asList(array).contains(key);
}
Adakah yang dapat membantu saya?
Terima kasih.
Hashset
jawaban mekanisme pengadilan ulang berdasarkan. Itu cara tercepat.ArrayList
implementasi melakukan hal yang sama.Jawaban:
Inilah solusi Java 8
sumber
Anda bisa menggunakan
ArrayUtils.contains
dariApache Commons Lang library
.sumber
ArrayUtils.contains()
adalah bagian dariApache Commons Lang
perpustakaan. Meskipun itu lib yang bagus, mungkin masih bukan ide yang baik untuk menambahkan dependensi eksternal hanya untuk memeriksa apakah array berisi elemen: DItu karena
Arrays.asList(array)
pengembalianList<int[]>
.array
argumen diperlakukan sebagai satu nilai yang ingin Anda bungkus (Anda mendapatkan daftar array int), bukan sebagai vararg.Perhatikan bahwa ini berfungsi dengan tipe objek (bukan primitif):
atau bahkan:
Tetapi Anda tidak dapat melakukannya
List<int>
dan autoboxing tidak berfungsi di sini.sumber
Jambu biji menawarkan metode tambahan untuk tipe primitif. Di antara mereka, metode berisi yang mengambil argumen yang sama seperti milik Anda.
Anda mungkin juga mengimpor versi jambu biji secara statis.
Lihat Dijelaskan Primitif Jambu Biji
sumber
Cara berbeda:
Ini mengubah larik yang diteruskan. Anda akan memiliki opsi untuk menyalin larik dan mengerjakan larik asli, yaitu.
int[] sorted = array.clone();
Tapi ini hanyalah contoh kode singkat. Runtime adalah
O(NlogN)
sementara cara AndaO(N)
sumber
contains
metode memodifikasi array saya.-1
jika itu bermaksud menjadi kenyataan. "Titik penyisipan didefinisikan sebagai titik di mana kunci akan disisipkan ke dalam daftar: indeks elemen pertama lebih besar dari kunci, atau list.size () jika semua elemen dalam daftar kurang dari kunci yang ditentukan. ". Perlu dikatakan>= 0
.Aku tahu ini sudah sangat larut, tapi coba
Integer[]
sajaint[]
.sumber
1. penggunaan satu kali
2. Gunakan HashSet untuk pertimbangan kinerja jika Anda menggunakan lebih dari sekali.
sumber
Coba ini:
sumber
Anda dapat mengonversi larik int primitif Anda ke dalam daftar larik Integer menggunakan kode Java 8 di bawah ini,
Dan kemudian gunakan
contains()
metode untuk memeriksa apakah daftar berisi elemen tertentu,sumber
ini bekerja di java 8
sumber
Anda dapat menggunakan
java.util.Arrays
kelas untuk mengubah arrayT[?]
dalamList<T>
objek dengan metode seperticontains
:sumber
Bergantung pada seberapa besar array int Anda, Anda akan mendapatkan kinerja yang jauh lebih baik jika Anda menggunakan koleksi dan
.contains
daripada melakukan iterasi pada array satu elemen pada satu waktu:sumber
Solusi # 1
Karena pertanyaan awal hanya menginginkan solusi yang disederhanakan (dan bukan yang lebih cepat), berikut adalah solusi satu baris:
Penjelasan: Javadoc
Arrays.toString()
menyatakan hasil diapit tanda kurung siku dan elemen yang berdekatan dipisahkan oleh karakter "," (koma diikuti oleh spasi). Jadi kita bisa mengandalkan ini. Pertama kami mengonversiarray
menjadi string, dan kemudian kami memeriksa apakahkey
ada dalam string ini. Tentu saja kami tidak dapat menerima "sub-angka" (misalnya "1234" berisi "23"), jadi kami harus mencari pola di manakey
diawali dengan kurung buka atau spasi, dan diikuti dengan tanda kurung tutup atau koma.catatan: Pola regexp yang digunakan juga menangani angka negatif dengan benar (yang representasi stringnya dimulai dengan tanda minus).
Solusi # 2
Solusi ini sudah diposting tetapi berisi kesalahan, jadi saya memposting solusi yang benar:
Juga solusi ini memiliki efek samping: ia memodifikasi
array
(mengurutkannya).sumber
Coba
Integer.parseInt()
lakukan ini .....sumber