โดยทั่วไปแล้ว เพื่อนที่มีประสบการณ์ในการพัฒนาสามารถตระหนักถึงฟังก์ชันดังกล่าวได้ แต่มันเป็นเรื่องของประสิทธิภาพเท่านั้น เมื่อเราประสบปัญหาดังกล่าว เราจะคิดถึงมันตามลำดับขั้นเสมอ ขั้นแรกให้สร้างอาร์เรย์ แล้วเพิ่มตัวเลขสุ่มลงในอาร์เรย์ในระหว่างกระบวนการบวกตัวเลข ให้ตรวจสอบก่อนว่ามีอยู่ในอาร์เรย์หรือไม่ หากไม่มีหมายเลขนี้ จะไม่มีการเพิ่มลงในอาร์เรย์โดยตรง โดยทั่วไปเราคิดเกี่ยวกับปัญหาในลักษณะนี้ และการทำงานสามารถทำได้โดยการคิดในลักษณะนี้ ดังที่ได้กล่าวไปแล้ว มันเป็นเพียงเรื่องของประสิทธิภาพเท่านั้น
เพื่อให้เข้าใจความหมายของคำถามนี้ได้ดีขึ้น ก่อนอื่นเรามาดูเนื้อหาเฉพาะกันก่อน: สร้างอาร์เรย์สุ่ม 1-100 แต่ตัวเลขในอาร์เรย์ไม่สามารถทำซ้ำได้ นั่นคือ ตำแหน่งจะเป็นแบบสุ่ม แต่เป็นองค์ประกอบของอาร์เรย์ ไม่สามารถทำซ้ำได้ ในที่นี้เราไม่ได้ระบุความยาวของอาร์เรย์ เราสามารถปล่อยให้มีความยาวระหว่าง 1-100 ก็ได้
ต่อไปเรามาดูวิธีการนำไปใช้กันดีกว่า โดยปกติแล้วเราจะใช้ ArrayList เพื่อนำไปใช้งาน ดังที่แสดงในโค้ดต่อไปนี้:
คัดลอกรหัสรหัส ดังต่อไปนี้:
แพ็คเกจ cn.sunzn.randomnumber;
นำเข้า java.util.ArrayList;
นำเข้า java.util.สุ่ม;
การสาธิตคลาสสาธารณะ {
โมฆะคงที่สาธารณะ main (String [] args) {
ค่าวัตถุ [] = วัตถุใหม่ [20];
สุ่ม สุ่ม = สุ่มใหม่();
ArrayList<Integer> list = ใหม่ ArrayList<Integer>();
สำหรับ (int i = 0; i <values.length; i++) {
หมายเลข int = Random.nextInt (100) + 1;
ถ้า (!list.contains(หมายเลข)) {
list.add(หมายเลข);
-
-
ค่า = list.toArray();
/************ สำรวจอาร์เรย์และพิมพ์ข้อมูล************/
สำหรับ (int i = 0; i <values.length; i++) {
System.out.print (ค่า [i] + "/t");
ถ้า ((i + 1) % 10 == 0) {
System.out.println("/n");
-
-
-
-
กระบวนการดำเนินการข้างต้นค่อนข้างไม่มีประสิทธิภาพ เพราะทุกครั้งที่คุณเพิ่ม คุณจะต้องสำรวจว่ามีตัวเลขอยู่ในรายการปัจจุบันหรือไม่ ความซับซ้อนของเวลาคือ O(N^2) เราสามารถคิดได้แบบนี้: เนื่องจากมันไม่เกี่ยวข้องกับการทำซ้ำ เราจึงสามารถคิดถึงฟังก์ชันของ HashSet และ HashMap ได้ HashSet ใช้อินเทอร์เฟซ Set คำจำกัดความทางคณิตศาสตร์ของ Set คือคอลเลกชันที่ไม่มีการทำซ้ำและเรียงลำดับ HashMap ใช้ Map และไม่อนุญาตให้มีคีย์ที่ซ้ำกัน ด้วยวิธีนี้เราสามารถใช้ HashMap หรือ HashSet เพื่อบรรลุเป้าหมายนี้ได้
เมื่อใช้ HashMap เพื่อใช้งาน คุณจะต้องแปลงคีย์เป็นอาร์เรย์เท่านั้น รหัสจะเป็นดังนี้:
คัดลอกรหัสรหัส ดังต่อไปนี้:
แพ็คเกจ cn.sunzn.randomnumber;
นำเข้า java.util.HashMap;
นำเข้า java.util.สุ่ม;
การสาธิตคลาสสาธารณะ {
โมฆะคงที่สาธารณะ main (String [] args) {
ค่าวัตถุ [] = วัตถุใหม่ [20];
สุ่ม สุ่ม = สุ่มใหม่();
HashMap<Object, Object> hashMap = ใหม่ HashMap<Object, Object>();
/******* สร้างตัวเลขสุ่มและเก็บไว้ใน HashMap *******/
สำหรับ (int i = 0; i <values.length; i++) {
หมายเลข int = Random.nextInt (100) + 1;
hashMap.put(หมายเลข, i);
-
/************ นำเข้าอาร์เรย์จาก HashMap************/
ค่า = hashMap.keySet().toArray();
/************ สำรวจอาร์เรย์และพิมพ์ข้อมูล***************/
สำหรับ (int i = 0; i <values.length; i++) {
System.out.print (ค่า [i] + "/t");
ถ้า ((i + 1) % 10 == 0) {
System.out.println("/n");
-
-
-
-
เนื่องจากความสัมพันธ์ระหว่าง HashSet และ HashMap ใกล้กันเกินไป HashSet จึงถูกนำไปใช้โดยใช้ HashMap ที่ชั้นล่างสุด อย่างไรก็ตาม ไม่มีการรวบรวมค่า มีเพียงชุดของคีย์เท่านั้น ดังนั้นจึงสามารถใช้งานได้โดยใช้ HashSet โค้ดมีดังนี้ : :
คัดลอกรหัสรหัส ดังต่อไปนี้:
แพ็คเกจ cn.sunzn.randomnumber;
นำเข้า java.util.HashSet;
นำเข้า java.util.สุ่ม;
การสาธิตชั้นเรียนสาธารณะ {
โมฆะคงที่สาธารณะ main (String [] args) {
สุ่ม สุ่ม = สุ่มใหม่();
ค่าวัตถุ [] = วัตถุใหม่ [20];
HashSet<จำนวนเต็ม> hashSet = ใหม่ HashSet<จำนวนเต็ม>();
/******* สร้างตัวเลขสุ่มและเก็บไว้ใน HashSet *******/
สำหรับ (int i = 0; i <values.length; i++) {
หมายเลข int = Random.nextInt (100) + 1;
hashSet.add(หมายเลข);
-
ค่า = hashSet.toArray();
/************* สำรวจอาร์เรย์และพิมพ์ข้อมูล**********/
สำหรับ (int i = 0; i <values.length; i++) {
System.out.print (ค่า [i] + "/t");
ถ้า ((i + 1) % 10 == 0) {
System.out.println("/n");
-
-
-
-
การใช้งานนี้มีประสิทธิภาพมากกว่าเล็กน้อย หากเราจำกัดความยาวของอาร์เรย์ เราเพียงแค่ต้องเปลี่ยน for loop และตั้งค่าให้เป็น whlie loop ดังที่แสดงด้านล่าง:
คัดลอกรหัสรหัส ดังต่อไปนี้:
แพ็คเกจ cn.sunzn.randomnumber;
นำเข้า java.util.HashSet;
นำเข้า java.util.สุ่ม;
การสาธิตชั้นเรียนสาธารณะ {
โมฆะคงที่สาธารณะ main (String [] args) {
สุ่ม สุ่ม = สุ่มใหม่();
ค่าวัตถุ [] = วัตถุใหม่ [20];
HashSet<จำนวนเต็ม> hashSet = ใหม่ HashSet<จำนวนเต็ม>();
/****** สร้างตัวเลขสุ่มและเก็บไว้ใน HashSet ******/
ในขณะที่ (hashSet.size() < ค่าความยาว) {
hashSet.add(random.nextInt(100) + 1);
-
ค่า = hashSet.toArray();
/************ สำรวจอาร์เรย์และพิมพ์ข้อมูล************/
สำหรับ (int i = 0; i <values.length; i++) {
System.out.print (ค่า [i] + "/t");
ถ้า ((i + 1) % 10 == 0) {
System.out.println("/n");
-
-
-
-