4 Cara Mencari Pendua dalam Senarai Java
Sumber: Codippa Artikel ini merangkumi pelbagai cara untuk mencari pendua dalam Senarai. Kami memanggil elemen pendua yang muncul lebih daripada sekali.1. Menggunakan Set
Di bawah ialah algoritma untuk mencari elemen pendua dalam Senarai Java menggunakan Set .- Kami mencipta objek Java Set baharu dan ArrayList baharu untuk menyimpan elemen pendua.
- Kami melakukan lelaran atau gelung melalui senarai.
- Kami menambah setiap elemen dalam senarai ke Set menggunakan kaedah add() .
- Akibatnya, add() mengembalikan benar jika elemen ditambahkan, dan palsu jika elemen itu sudah ada dalam Set .
- Jika elemen sudah ada dalam Set , ia adalah pendua. Kemudian kami menambahnya pada ArrayList .
- Pada penghujung lelaran, ArrayList baharu akan mengandungi semua elemen pendua daripada Senarai asal ( List ).
List<Integer> numbers = List.of(1, 2, 3, 4, 3, 1, 2);
Set<Integer> set = new HashSet<>();
List<Object> duplicates = new ArrayList<>();
numbers.forEach(n -> {
if (!set.add(n)) {
duplicates.add(n);
}
});
System.out.println("Duplicate elements: " + duplicates);
Kesimpulan:
Elemen pendua: [3, 1, 2]
Ambil perhatian bahawa kami menggunakan kaedah forEach() untuk melelaran melalui List , tetapi anda boleh menggunakan kaedah lain.
2. Menggunakan Peta
Di bawah ialah langkah algoritma untuk kaedah mencari pendua dalam Senarai .- Cipta objek Peta baharu dan ArrayList baharu untuk memegang elemen pendua.
- Kekunci Peta ini ialah unsur Senarai asal dan nilainya ialah bilangan kejadiannya dalam Senarai .
- Gelung melalui senarai ( Senarai ).
- Untuk setiap elemen dalam Senarai , semak sama ada ia wujud sebagai kunci dalam Peta menggunakan kaedah containsKey() .
- Jika ia wujud, tambah nilainya dalam Peta dan tambahkannya semula menggunakan kaedah put() .
- Jika ia tidak wujud, tambahkannya pada Peta dengan nilai 1.
- Setelah lelaran senarai selesai, semua elemen Peta dengan nilai lebih daripada 1 menjadi pendua.
- Akhir sekali, ulangi Peta dan tambah elemen yang nilainya lebih besar daripada 1 pada senarai untuk menyimpan elemen pendua.
List<Integer> numbers = List.of(1, 2, 3, 4, 3, 1, 2);
Map<Integer, Integer> countMap = new HashMap<>();
List<Object> duplicates = new ArrayList<>();
numbers.forEach(n -> {
if (countMap.containsKey(n)) {
countMap.put(n, countMap.get(n) + 1);
} else {
countMap.put(n, 1);
}
});
countMap.keySet().forEach(k -> {
if(countMap.get(k)> 1) {
duplicates.add(k);
}
});
3. Menggunakan gelung bersarang
Jika anda diminta untuk mencari elemen pendua dalam senarai tanpa menggunakan sebarang kelas Koleksi seperti Set , Map dan sebagainya, maka kaedah ini akan berguna. Peringkat algoritma:- Gelung melalui senarai ( Senarai ).
- Selepas gelung selesai buat kali pertama, kembali ke permulaan dan ulangi langkah sekali lagi untuk mencari setiap item dalam senarai yang lain.
- Jika elemen gelung semasa adalah sama dengan mana-mana elemen yang tinggal, ia adalah pendua.
List<Integer> numbers = List.of(1, 2, 3, 4, 3, 1, 2);
List<Object> duplicates = new ArrayList<>();
for (int i = 0; i < numbers.size() - 1; i++) {
for (int j = i + 1; j < numbers.size(); j++) {
if (numbers.get(i).equals(numbers.get(j))) {
duplicates.add(numbers.get(i));
}
}
}
4. Menggunakan Java Stream
Kaedah ini berdasarkan Java 8 thread dan berfungsi seperti ini:- Tukar Senarai kepada Strim .
- Tukar strim kepada Peta menggunakan kaedah collect() . Sebagai contoh, kunci ialah setiap elemen dalam senarai, dan nilai ialah bilangan kejadian.
- Kaedah collect() kembali dan Map mengambil Collector sebagai hujah. Pelaksanaan Pemungut menentukan kunci dan nilai Peta yang dihasilkan .
- Memandangkan kami mahu kunci Peta menjadi elemen Senarai dan nilainya ialah bilangan kejadiannya, kami boleh menggunakan Collectors.groupingBy() untuk mencipta collector .
- Setelah Map telah dibuat menggunakan groupingBy() , gunakan kaedah entrySet() untuk mendapatkan set objek Map.Entry .
- Tapis rekod berdasarkan nilai (iaitu, bilangan kejadian) lebih daripada 1.
- Padankan rekod yang ditapis dengan kuncinya.
List<Integer> numbers = List.of(1, 2, 3, 4, 3, 1, 2);
Map<Object, Long> map = numbers.
stream().
collect(
Collectors.
groupingBy(n -> n, Collectors.counting())
);
List<Object> duplicates = map.
entrySet().
stream().
filter(e -> e.getValue() > 1).
map(e -> e.getKey()).
collect(Collectors.toList());
Kaedah groupingBy() digunakan untuk mengumpulkan item dalam koleksi berdasarkan kriteria tertentu. Berikut ialah contoh cara kaedah ini berfungsi:
- Kriteria disediakan sebagai ungkapan lambda kerana groupingBy() mengambil argumen Function , iaitu antara muka fungsi.
- Dalam kes ini, kami mengumpulkan mengikut fungsi identiti n -> n , yang bermaksud kami mengumpulkan elemen senarai mengikut nilainya.
- Argumen kedua kepada groupingBy() ialah pengumpul lain yang menentukan cara elemen dalam setiap kumpulan harus digabungkan.
- Di sini kami menggunakan Collectors.counting() yang mencipta Peta yang mengandungi kiraan setiap elemen dalam senarai.
Cara Membuat Pemain Media Mudah Menggunakan Java
Sumber: Sederhana Tutorial ini akan membantu anda mencipta pemain media ringkas dalam Java untuk memainkan fail audio dan video. Membangunkan pemain media boleh menjadi cara terbaik untuk mempelajari cara menggunakan perpustakaan terbina dalam Java untuk berfungsi dengan fail media. Untuk melaksanakan tugas ini, kami akan menggunakan JavaFX dan kit alat Antara Muka Pengguna Grafik (GUI) untuk Java.Langkah 1: Persediaan Projek
Pertama, kami perlu menyediakan projek Java kami. Kami akan menggunakan Eclipse sebagai IDE, tetapi anda boleh menggunakan mana-mana IDE pilihan anda. Buat projek Java baharu dan namakannya "MediaPlayer". Kami juga perlu menambah perpustakaan JavaFX pada projek kami. Untuk melakukan ini, pergi ke sifat projek dan tambahkan perpustakaan JavaFX pada laluan binaan projek.Langkah 2: Buat Antara Muka Pengguna
Seterusnya kami akan mencipta antara muka pengguna untuk pemain media kami. Ia akan menjadi antara muka pengguna yang ringkas dengan butang main, butang henti dan panel pemain media yang memaparkan fail video atau audio yang ingin kami mainkan. Untuk antara muka kami, kami akan menggunakan susun atur BorderPane . Panel pemain media akan berada di tengah-tengah BorderPane, dan butang main dan berhenti akan berada di bahagian bawah BorderPane. Berikut ialah kod UI:import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.stage.Stage;
public class MediaPlayerApp extends Application {
private MediaPlayer mediaPlayer;
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Media Player");
Button playButton = new Button("Play");
playButton.setOnAction(e -> mediaPlayer.play());
Button stopButton = new Button("Stop");
stopButton.setOnAction(e -> mediaPlayer.stop());
BorderPane borderPane = new BorderPane();
Media media = new Media("http://www.example.com/sample.mp4");
mediaPlayer = new MediaPlayer(media);
MediaView mediaView = new MediaView(mediaPlayer);
borderPane.setCenter(mediaView);
borderPane.setBottom(stopButton);
borderPane.setRight(playButton);
Scene scene = new Scene(borderPane, 600, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Dalam kod ini, kami mencipta dua butang: playButton dan stopButton . Apabila butang main diklik, kami memanggil kaedah main() objek mediaPlayer . Apabila butang berhenti diklik, kami memanggil kaedah stop() objek mediaPlayer . Kami juga mencipta objek Media dengan URL contoh fail video dan objek mediaPlayer dengan objek Media . Akhir sekali, kami mencipta objek MediaView dengan objek MediaPlayer dan menetapkannya sebagai pusat BorderPane .
GO TO FULL VERSION