โค้ดยิม/จาวาบล็อก/สุ่ม/คลาสคอลเลกชันในภาษาจาวา
John Squirrels
ระดับ
San Francisco

คลาสคอลเลกชันในภาษาจาวา

เผยแพร่ในกลุ่ม
สวัสดี! ArrayListในบทเรียนสองสามบทที่ผ่าน มาเรามีความก้าวหน้าอย่างมากในการเรียนรู้ อย่างไรก็ตาม จนถึงตอนนี้เราได้ดำเนินการอย่างง่ายที่สุดเท่านั้น: ลบ แทรก และแสดง แน่นอนว่าสิ่งนี้ไม่ครอบคลุมรายการงานทั้งหมดที่นักพัฒนาต้องทำเมื่อทำงานArrayListกับ จำบทเรียนเกี่ยวกับอาร์เรย์และArraysคลาสได้หรือไม่? ผู้สร้าง Java ออกแบบคลาสนี้โดยเฉพาะเพื่อจัดการกับงานทั่วไปที่โปรแกรมเมอร์ต้องเผชิญเมื่อทำงานกับอาร์เรย์ และสิ่งที่เกี่ยวกับArrayList? แน่นอนว่ามีรายการงานทั่วไปที่ต้องดำเนินการด้วย มีการนำไปใช้ในคลาสเฉพาะหรือไม่ หรือเราต้องเขียนการนำไปใช้เองทุกครั้ง แน่นอน คุณไม่จำเป็นต้องเขียนทุกอย่างด้วยตัวเอง การดำเนินการทั่วไปที่เกี่ยวข้องกับคอลเลกชันได้ถูกนำไปใช้แล้วในCollectionsคลาส สแตติกพิเศษ ชั้นคอลเลกชัน - 1 ใน Java กลุ่มของโครงสร้างข้อมูลโดยทั่วไปจะเรียกว่าคอลเลกชัน สามารถเก็บข้อมูลได้หลายวิธี จนถึงตอนนี้ เราได้ศึกษาเฉพาะArrayListคลาสซึ่งข้อมูลถูกเก็บไว้ในอาร์เรย์ เราจะทำความคุ้นเคยกับคอลเลกชันอื่นในภายหลัง สำหรับตอนนี้ ก็เพียงพอแล้วที่จะเข้าใจว่าCollectionsชั้นเรียนได้รับการออกแบบมาให้ใช้งานได้ไม่เพียงเท่านั้นArrayListแต่ยังรวมถึงคอลเล็กชันประเภทอื่นๆ ด้วย (จึงเป็นชื่อของมัน) ดังนั้นCollectionsชั้นเรียนช่วยงานอะไรได้บ้างเมื่อทำงานกับArrayList? สิ่งแรกและชัดเจนที่สุดคือการเรียงลำดับ ในบทเรียนเกี่ยวกับอาร์เรย์ เราพิจารณาตัวอย่างที่มีตัวเลข ตอนนี้เราจะพิจารณาตัวอย่างด้วยสตริง คลาสCollectionsใช้sort()วิธีการเรียงลำดับเนื้อหาของคอลเลกชัน:
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune));
       Collections.sort(solarSystem);
       System.out.println(solarSystem);

   }
}
ผลลัพธ์: [โลก ดาวพฤหัสบดี ดาวอังคาร ดาวพุธ ดาวเนปจูน ดาวเสาร์ ดาวยูเรนัส ดาวศุกร์] สตริงจะเรียงตามตัวอักษร! แต่ทำไมต้องเรียงตามตัวอักษร? คลาสStringใช้ตรรกะที่ควบคุมวิธีเปรียบเทียบสตริง (ซึ่งเรียงตามตัวอักษร) สำหรับชั้นเรียนที่คุณสร้างเอง คุณสามารถใช้ตรรกะการเปรียบเทียบของคุณเองได้ แต่เราจะพูดถึงเรื่องนี้ในบทเรียนอื่นๆ คลาส นี้Collectionsยังช่วยคุณค้นหาองค์ประกอบต่ำสุดและสูงสุดในไฟล์ArrayList. สิ่งนี้ทำได้โดยใช้min()and max()วิธีการ:
public static void main(java.lang.String[] args) {

   ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
   System.out.println(Collections.max(numbers));
   System.out.println(Collections.min(numbers));

}
ผลลัพธ์: 7 1 ตามธรรมชาติแล้ว สิ่งนี้สะดวกกว่าการเขียนโค้ดด้วยตนเองเพื่อวนซ้ำองค์ประกอบทั้งหมดและค้นหาองค์ประกอบที่ใหญ่ที่สุด/เล็กที่สุด :) อีกวิธีที่มีประโยชน์มากreverse()คือ ถ้าเราต้อง "พลิก" รายการเพื่อให้องค์ประกอบไปในลำดับตรงกันข้าม เราจะทำอย่างไร มันคงไม่ง่ายนักที่จะเขียนอัลกอริทึมด้วยตัวเอง :) โชคดีที่reverse()วิธีการนั้นรู้วิธีอยู่แล้ว สมมติว่าเราไม่ชอบความจริงที่ว่าsort()วิธีนี้จัดเรียงดาวเคราะห์ของเราตามตัวอักษร และเราต้องการกลับลำดับจาก Z เป็น A:
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune));
       Collections.sort(solarSystem);
       Collections.reverse(solarSystem);
       System.out.println(solarSystem);

   }
}
ผลลัพธ์: [Venus, Uranus, Saturn, Neptune, Mercury, Mars, Jupiter, Earth] เราได้พูดคุยกันมากมายเกี่ยวกับการจัดเรียง ลำดับขององค์ประกอบ ฯลฯ แต่ถ้าเรามีวัตถุประสงค์ตรงกันข้ามล่ะ ตัวอย่างเช่น สมมติว่าเรากำลังพยายามใช้เกมบิงโก เราเพิ่ม 100 ตัวเลขลงในกลอง ควรปรากฏบนหน้าจอทีละรายการ ผู้เล่นคนแรกที่ขีดฆ่าตัวเลขทั้งหมดบนตั๋วจะเป็นผู้ชนะ ทำได้ง่ายโดยใช้shuffle()วิธีการ:
public class Main {

   public static void main(java.lang.String[] args) {

       ArrayList<Integer> bingoDrum = new ArrayList<>(100);
       for (int i = 1; i <= 100; i++) {

           bingoDrum.add(i);// add the numbers 1 to 100 to the drum
       }

       Collections.shuffle(bingoDrum);// Mix it up
       System.out.println ("Your attention, please! Here are the first 10 numbers from the drum!");
       for (int i = 0; i < 10; i++) {

           System.out.println(bingoDrum.get(i));
       }

   }
}
ผลลัพธ์: โปรดทราบ! นี่คือ 10 ตัวเลขแรกจากกลอง! 32 61 4 81 25 8 66 35 42 71 ง่ายขนาดนั้น! ปัญหาได้รับการแก้ไขแล้วและเขียนส่วนของเราในเกม :) ตอนนี้ลองนึกภาพสถานการณ์ที่แตกต่างออกไป ก่อนหน้านี้ เราสร้างsolarSystemรายการที่มีดาวเคราะห์ และดูเหมือนว่าจะเหมาะกับเราในทุก ๆ ด้าน แต่อย่างหนึ่ง: คุณสามารถลบรายการจากมันและเพิ่มรายการใหม่ ! เห็นได้ชัดว่านี่ไม่ใช่พฤติกรรมที่เราคาดหวัง: ระบบสุริยะไม่ควรเปลี่ยนแปลงในโปรแกรมของเรา ชั้นCollectionsเรียนมีวิธีการที่น่าสนใจมาก: unmodifiableList(). สร้างรายการที่ไม่เปลี่ยนรูปจากรายการที่ส่งผ่านเป็นอาร์กิวเมนต์ คุณไม่สามารถเพิ่มหรือลบรายการจากรายการนี้ได้ เมื่อต้องจัดการกับรายชื่อดาวเคราะห์ในระบบสุริยะ นี่คือสิ่งที่เราต้องการ!
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       List<String> solarSystem = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune)));
       solarSystem.add("Pluto");// Try to add a new element
   }
}
เอาต์พุต: ข้อยกเว้นในเธรด "main" java.lang.UnsupportedOperationException ที่ java.util.Collections$UnmodifiableCollection.add(Collections.java:1075) ที่ Main.main(Main.java:21) นี่เป็นข้อผิดพลาด: คุณไม่สามารถ เพิ่มอะไรให้solarSystem! สิ่งเดียวที่คุณต้องให้ความสนใจที่นี่คือข้อเท็จจริงที่ว่าเมธอดนี้ส่งคืนList<>(ไม่ArrayList<>) เนื่องจากประเภทนี้เป็นเรื่องปกติสำหรับรายการทุกประเภท อีกสถานการณ์หนึ่งที่เกิดขึ้นได้ง่ายคือโปรแกรมเมอร์เพิ่มองค์ประกอบผิดลำดับ หากสิ่งนี้เกิดขึ้นและเราพบว่าดาวพุธและดาวเนปจูนปะปนกัน เราสามารถแก้ไขข้อผิดพลาดนี้ได้โดยใช้วิธีswap():
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(neptune, venus, earth, mars
       , jupiter, saturn, uranus, mercury));// The planets are in the wrong order
       System.out.println(solarSystem);

       Collections.swap(solarSystem, solarSystem.indexOf(mercury), solarSystem.indexOf(neptune));
       System.out.println(solarSystem);

   }
}
เราส่งผ่านswap()รายการของเราและดัชนีขององค์ประกอบทั้งสองที่ต้องสลับไปยังวิธีการ โปรดทราบว่าวิธีนี้ใช้ได้กับดัชนี ไม่ใช่การอ้างอิง ดังนั้นที่นี่เราต้องใช้ArrayList.indexOf()วิธีการ ผลลัพธ์: [Neptune, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Mercury] [Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune] ในที่สุด เราจะทำความคุ้นเคยกับวิธีการที่น่าสนใจมาก : disjoint(). ตรวจสอบว่าคอลเลกชั่นสองคอลเลกชั่นตัดกันหรือไม่ เช่น มีองค์ประกอบที่เหมือนกันอย่างน้อยหนึ่งรายการหรือไม่ ถ้าไม่มีก็จะคืนค่าจริง พวกเขาทำแล้วจะส่งกลับเท็จ
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystemPart1 = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars));
       ArrayList<String> solarSystemPart2 = new ArrayList<>(Arrays.asList(jupiter, saturn, uranus, neptune));

       System.out.println(Collections.disjoint(solarSystemPart1, solarSystemPart2));

   }
}
อย่างที่คุณเห็น ทั้งสองรายการของเรามีองค์ประกอบที่แตกต่างกันโดยสิ้นเชิง ดังนั้นโปรแกรมจึงแสดงผลเป็นtrue นี่เป็นคลาสที่น่าสนใจและมีประโยชน์มาก เช่นArraysมันทำงานประจำและน่าเบื่อให้เรามากมาย ปล่อยให้เราโฟกัสกับสิ่งอื่น
ความคิดเห็น
  • เป็นที่นิยม
  • ใหม่
  • เก่า
คุณต้องลงชื่อเข้าใช้เพื่อแสดงความคิดเห็น
หน้านี้ยังไม่มีความคิดเห็นใด ๆ