CodeGym /وبلاگ جاوا /Random-FA /لیست جاوا
John Squirrels
مرحله
San Francisco

لیست جاوا

در گروه منتشر شد
Java Collection Framework شامل رابط ها و کلاس های بسیار مفیدی است که آنها را برای کار با ساختارهای داده پیاده سازی می کند. می توان گفت که این یکی از مهمترین فریم ورک های JDK است. رابط فهرست بسیار محبوب است. زیرا بدون انواع لیست ها در برنامه نویسی ضروری است. در این مقاله به این رابط، روش‌ها و پیاده‌سازی‌های فهرست جاوا می‌پردازیم.

رابط فهرست جاوا

مهمترین چیز در مورد لیست این است که یک مجموعه سفارشی است . شما همچنین می توانید آن را دنباله نامید. در جاوا، لیست ها همگن هستند، یعنی عناصر لیست از یک نوع داده هستند. اینترفیس فهرست جاوا از مجموعه ارث می برد، و تمام عملیات آن را به ارث می برد. علاوه بر آنها، عملیات زیر نیز در List امکان پذیر است:
  • دسترسی موقعیتی هر عنصر دارای یک شاخص است و می توان آن را بر اساس موقعیت خود دستکاری کرد. در لیست یعنی می توانید عناصر را اضافه، حذف و اصلاح کنید.
  • جستجو کردن. شما می توانید یک عنصر را در یک لیست با محتوای آن پیدا کنید و فهرست آن را برگردانید.
  • تکرار. ماهیت ترتیبی List اجازه استفاده از روش های تکرار (listIterator) را می دهد.
  • محدوده نمای. متد sublist عملیات محدوده دلخواه را در لیست انجام می دهد.

روش های فهرست جاوا

عملیات فوق در متدهای رابط جاوا لیست نمایش داده می شوند. در اینجا برخی از آنها آورده شده است:
روش شرح
افزودن (عنصر E) این روش عنصر عنصر را به انتهای این لیست اضافه می کند.
افزودن (int index، عنصر) این روش یک عنصر را در یک شاخص خاص در لیست اضافه می کند. اگر پارامتر مورد نیاز ارسال شود، عنصر را در انتهای لیست اضافه می کند.
addAll (شاخص int، مجموعه مجموعه) تمام عناصر موجود در مجموعه داده شده را به لیست اضافه می کند. اگر یک پارامتر واحد ارسال شود، تمام عناصر مجموعه داده شده را در انتهای لیست اضافه می کند.
اندازه() اندازه لیست (تعداد عناصر موجود در لیست) را برمی گرداند.
دریافت (int index) عنصر را در شاخص مشخص شده برمی گرداند.
مجموعه (شاخص int، عنصر) عناصر موجود در یک شاخص معین را با عنصر جدید جایگزین می کند و عنصری را که با یک عنصر جدید جایگزین شده است برمی گرداند.
حذف (int index) یک عنصر را از شاخص مشخص شده حذف می کند.
حذف (عنصر) اولین رخداد عنصر داده شده در لیست را حذف می کند.
واضح () تمام عناصر را از لیست حذف می کند.
indexOf(عنصر) اولین رخداد عنصر داده شده را برمی گرداند. اگر عنصر در لیست وجود نداشته باشد، -1 را برمی گرداند .
lastIndexOf(عنصر) آخرین رخداد عنصر داده شده را برمی گرداند. اگر عنصر در لیست وجود نداشته باشد، -1 را برمی گرداند .
برابر (عنصر) برابری عنصر داده شده را با عناصر لیست مقایسه کنید.
hashCode() مقدار هش کد لیست داده شده را برگردانید.
خالی است() بررسی می کند که آیا لیست خالی است. اگر لیست خالی باشد مقدار true را برمی گرداند.
حاوی (عنصر) بررسی می کند که آیا لیست حاوی عنصر است یا خیر . اگر لیست حاوی عنصر باشد، مقدار true را برمی‌گرداند.
حاوی همه (مجموعه مجموعه) بررسی می کند که آیا لیست شامل تمام مجموعه عناصر است یا خیر.
مرتب سازی (مقایسه کننده) عناصر لیست را بر اساس مقایسه کننده داده شده مرتب می کند.
فهرست فرعی (int fromIndex، int toIndex) نمای بخشی از این لیست را بین قسمت های مشخص شده fromIndex, inclusive, و toIndex, انحصاری برمی گرداند.

پیاده سازی لیست

از آنجایی که List یک رابط است، برنامه ها باید یک پیاده سازی مشخص از آن ایجاد کنند. شما می توانید بین پیاده سازی لیست زیر در Java Collections API یکی را انتخاب کنید:
  • java.util.ArrayList
  • java.util.LinkedList
  • java.util.Vector
  • java.util.Stack
محبوب ترین پیاده سازی رابط List به نام ArrayList. خیلی کمتر، اما همچنان می‌توانید استفاده از LinkedList را در کارهای واقعی مشاهده کنید، اما Vector و Stack برای مدت طولانی از نظر اخلاقی منسوخ شده‌اند، بنابراین به احتمال زیاد آنها را فقط در پروژه‌هایی با کد قدیمی قدیمی خواهید یافت.

لیست اعلامیه رابط

شما می توانید یک لیست در برنامه جاوا را به یکی از روش های زیر اعلام کنید:

List<String> myList = new ArrayList();
List myList1 = new ArrayList();
List myList3 = new ArrayList<String>();
ArrayList arrayList = new ArrayList();
بهتر است یک لیست جدید از طریق یک رابط اعلام کنید. به طور مشابه، می توانید سایر پیاده سازی های List را اعلام کنید. کوتاه ترین راه:

Vector myVector = new Vector;
LinkedList linkedList = new LinkedList();
Stack stack = new Stack();
با چنین اعلانی، نوع داده عناصر چنین لیست هایی در زمان اولیه سازی لیست تعیین می شود، یعنی زمانی که عناصر در آنجا اضافه می شوند.

List myList = new ArrayList<String>();
Vector myVector = new Vector();
LinkedList linkedList = new LinkedList();
Stack stack = new Stack();
stack.add("Paul");
linkedList.add(1);
myVector.add(1.2f);
myList.add('a');
اکنون فقط رشته ها را می توان به پشته ما اضافه کرد، اعداد صحیح را به linkedList ، شناور به myVector ، و myList لیستی از کاراکترها است.

ArrayList چگونه کار می کند

اگر قبلاً با آرایه های معمولی آشنا هستید، با ArrayList نیز تا حدودی آشنا هستید. در واقع ArrayList یک آرایه پویا است و درون آن یک آرایه معمولی قرار دارد. این آرایه به عنوان ذخیره اطلاعات عمل می کند. ArrayList فقط انواع مرجع، هر شیء، از جمله کلاس های شخص ثالث، رشته ها، جریان های خروجی و مجموعه های دیگر را ذخیره می کند. کلاس های Wrapper برای ذخیره انواع داده های اولیه در ArrayList استفاده می شود. هنگام ایجاد یک لیست، می توانیم بلافاصله اندازه آن را تنظیم کنیم، اما در بیشتر موارد این کار را نمی کنیم. به طور پیش فرض، اندازه ArrayList = 10. اضافه کردن یک عنصر جدید به یک ArrayList چگونه است؟ اول از همه، بررسی شروع می شود تا ببیند آیا فضای کافی در آرایه داخلی وجود دارد و آیا یک عنصر دیگر جا می شود یا خیر. اگر فضای خالی وجود داشته باشد، عنصر جدید به انتهای لیست، یعنی به سلولی که آخرین عنصر را دنبال می کند، اضافه می شود. ایندکس آن arraylist.size () خواهد بود. اگر فقط لیست خود را ایجاد کرده و خالی باشد، به این معنی است که () arrayList.size = 0. بر این اساس، یک عنصر جدید با اندیس 0 به سلول اضافه می شود. اگر معلوم شد فضای کافی وجود ندارد، یک عنصر جدید آرایه در داخل ArrayList با اندازه (اندازه OldArray * 1.5) + 1 ایجاد می شود. با همان اصل، یک درج در وسط لیست رخ می دهد، اما در همان زمان، همه عناصری که از عنصر درج شده پیروی می کنند، هستند. به سمت راست منتقل شد. بنابراین، اگر 5 عنصر در آرایه داشته باشیم، و لازم باشد یک عنصر را در سلول شماره 2 (یعنی سومین عنصر) وارد کنیم، سپس 0 و 1 عنصر آرایه در جای خود باقی می مانند، یک عنصر جدید در سلول 2 ظاهر می شود و سلف آن به سلول سوم و غیره می رود.

مثال فهرست جاوا (تحقق فهرست آرایه)


import java.util.*;

public class ArrayListExample2 {
   public static void main(String[] args) {
       List<String> myFriendsList = new ArrayList();
       //we created list of some objects 
       System.out.println( "the size of myList before init = " + myFriendsList.size());
       myFriendsList.add("Alex");
       myFriendsList.add("Tanya");
       myFriendsList.add("Veloxy");
       myFriendsList.add("Alex");
       myFriendsList.add("Andrew");
       System.out.println(myFriendsList);
       System.out.println( "the size of myList after init = " + myFriendsList.size());

       myFriendsList.add("Ihor");
       System.out.println(myFriendsList);
       System.out.println("the size of my list = " +  myFriendsList.size());


       //here the program will print out the first appearance of "Alex" element
       System.out.println(myFriendsList.indexOf("Alex"));
       //program will print out the first appearance of "Alex" element starting from the element 0

       myFriendsList.remove(3);
       System.out.println(myFriendsList.get(3));
       System.out.println("after removing one of Alex's there is only one Alex: " + myFriendsList);
       System.out.println(myFriendsList.get(1));



       myFriendsList.clear();
       System.out.println("the size of the vector after clear method = " +  myFriendsList.size());

   }
}
این هم خروجی این برنامه:
اندازه myList قبل از شروع = 0 [Alex, Tanya, Veloxy, Alex, Andrew] اندازه myList بعد از init = 5 [Alex, Tanya, Veloxy, Alex, Andrew, Ihor] اندازه لیست من = 6 0 Andrew after با حذف یکی از الکس فقط یک الکس وجود دارد: [الکس، تانیا، ولوکسی، اندرو، ایهور] تانیا اندازه بردار پس از روش شفاف = 0 فرآیند با کد خروج 0 به پایان رسید.

LinkedList چگونه کار می کند

در LinkedList، عناصر در واقع پیوندهایی در یک زنجیره هستند. هر عنصر علاوه بر داده هایی که ذخیره می کند، پیوندی به عنصر قبلی و بعدی دارد. این پیوندها به شما امکان می دهد از یک عنصر به عنصر دیگر پیمایش کنید. تکرار کننده از پیمایش در هر دو جهت پشتیبانی می کند. روش هایی را برای دریافت، حذف و درج در ابتدا، وسط و انتهای یک لیست پیاده می کند. به شما امکان می دهد هر عنصری از جمله null را اضافه کنید. LinkedList دو رابط را پیاده سازی می کند - نه تنها List، بلکه Deque. این امکان ایجاد یک صف دو جهته از هر عنصر، حتی null را فراهم می کند. هر شی که در لیست پیوندی قرار می گیرد یک گره (گره) است. هر گره حاوی یک عنصر، پیوندی به گره قبلی و بعدی است. در واقع، لیست پیوندی متشکل از دنباله ای از گره ها است که هر کدام برای ذخیره یک شی از نوع تعریف شده در زمان ایجاد طراحی شده اند.

مثال کد


import java.util.*;
public class LinkedListTest {

       public static void main(String args[]){

           List myLinkedList= new LinkedList<Integer>();
           myLinkedList.add(1);
           myLinkedList.add(2);
           myLinkedList.add(4);
           System.out.println("three added elements: " + myLinkedList);
           myLinkedList.add(5);
           myLinkedList.remove(1);
           System.out.println(myLinkedList);
           myLinkedList.size(); //3
           
           //add new element at the specified position:
           myLinkedList.add(2,7);
           System.out.println(myLinkedList);
                }
       }
خروجی اینجاست:
سه عنصر اضافه شده: [1، 2، 4] [1، 4، 5] [1، 4، 7، 5]

نمونه کد برداری

Vector نیز یک تحقق آرایه پویا است و بسیار شبیه به ArrayList است، اما همگام شده است و دارای برخی روش های قدیمی است که چارچوب مجموعه شامل نمی شود. در اینجا یک مثال ساده از استفاده از این کلاس آورده شده است.

import java.util.Vector;

public class VectorExample1 {

   public static void main(String[] args) {
       Vector vector = new Vector();
       System.out.println("the size of the empty vector = " +  vector.size());
       vector.add("Alex");
       vector.add("Tanya");
       vector.add("Andrew");
       System.out.println(vector);
       vector.add("Alex");
       vector.add("Ihor");
       System.out.println(vector);
       System.out.println("the size of the vector = " +  vector.size());
       System.out.println("the first element of the vector = " + vector.firstElement());

       //here the program will print out the first appearance of "Johnny" element
       System.out.println(vector.indexOf("Andrew"));
       //program will print out the first appearance of "Johnny" element starting from the element 1
       System.out.println(vector.indexOf("Alex", 1));
       System.out.println(vector);
       vector.clear();
       System.out.println("the size of the vector after clear method = " +  vector.size());

   }
}
خروجی این است:
اندازه بردار خالی = 0 [الکس، تانیا، اندرو] [الکس، تانیا، اندرو، الکس، ایهور] اندازه بردار = 5 اولین عنصر بردار = الکس 2 3 [الکس، تانیا، اندرو، Alex, Ihor] اندازه بردار پس از روش شفاف = 0 فرآیند با کد خروج 0 به پایان رسید

کد کلاس جاوا Stack مثال


import java.util.Stack;

public class StackTest {
   public static void main(String[] args) {
       Stack stack = new Stack();
       System.out.println(stack.isEmpty());
       stack.add("Paul");
       stack.add("Johnny");
       stack.add("Alex");
       System.out.println(stack.isEmpty());
       stack.push("Andrew");
       System.out.println(stack);
       stack.pop();
       System.out.println(stack);
   }
}
Stack نه تنها دارای متدهای add() و remove() است ، بلکه دارای push و pop نیز می باشد، آنها برای چنین ساختار داده ای کلاسیک هستند. پشته از قانون "اول وارد، آخرین بیرون" پیروی می کند - این یک ضد صف است. بنابراین، عملیات pop عنصری را که آخرین بار در پشته قرار داده شده بود، باز می کند. در اینجا خروجی مثال ما است:
درست غلط [پل، جانی، الکس، اندرو] [پل، جانی، الکس]
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION