الگوریتم ها (Algorithms)
الگوریتم (Algorithm) یعنی دستورِ مرحله ای برای حل مسئله. این دستورها روی ساختمان داده ها کار می کنند. در جاوا، کلاس Collections خیلی از الگوریتم ها را آماده دارد. پس معمولا از صفر نمی نویسیم و فقط درست استفاده می کنیم.
جستجو با فهرست مرتب
برای جستجو در لیست مرتب، از Collections.binarySearch() استفاده کن. اول باید لیست را مرتب کنی.
import java.util.*;
public class Main {
  public static void main(String[] args) {
    ArrayList<String> names = new ArrayList<>();
    names.add("Liam");
    names.add("Jenny");
    names.add("Kasper");
    names.add("Angie");
    Collections.sort(names);
    int index = Collections.binarySearch(names, "Angie");
    System.out.println("Angie is at index: " + index);
  }
}
مرتب سازی صعودی و نزولی
مرتب سازی خیلی رایج است. با Collections.sort() لیست را صعودی کن.
import java.util.*;
public class Main {
  public static void main(String[] args) {
    ArrayList<Integer> numbers = new ArrayList<>();
    numbers.add(5);
    numbers.add(1);
    numbers.add(7);
    numbers.add(3);
    numbers.add(9);
    Collections.sort(numbers);
    System.out.println(numbers);
  }
}
برای نزولی، از Collections.reverseOrder() کمک بگیر.
import java.util.*;
public class Main {
  public static void main(String[] args) {
    ArrayList<Integer> numbers = new ArrayList<>();
    numbers.add(5);
    numbers.add(1);
    numbers.add(7);
    numbers.add(3);
    numbers.add(9);
    Collections.sort(numbers, Collections.reverseOrder());
    System.out.println(numbers);
  }
}
پیمایش لیست ها
پیمایش یعنی دیدن آیتم ها پشت سرهم. با حلقه for-each ساده است.
import java.util.*;
public class Main {
  public static void main(String[] args) {
    ArrayList<String> colors = new ArrayList<>();
    colors.add("Red");
    colors.add("Green");
    colors.add("Blue");
    for (String c : colors) {
      System.out.println(c);
    }
  }
}
همچنین می توانی با ایتراتور (Iterator) پیمایش کنی. ایتراتور یعنی «گردش گر» لیست.
import java.util.*;
public class Main {
  public static void main(String[] args) {
    ArrayList<String> colors = new ArrayList<>();
    colors.add("Red");
    colors.add("Green");
    colors.add("Blue");
    Iterator<String> it = colors.iterator();
    while (it.hasNext()) {
      System.out.println(it.next());
    }
  }
}
الگوریتم های آماده دیگر
در Collections ابزارهای بیشتری هست؛ مثلا بزرگ ترین و کوچک ترین عنصر.
import java.util.*;
public class Main {
  public static void main(String[] args) {
    ArrayList<Integer> numbers = new ArrayList<>();
    numbers.add(5);
    numbers.add(1);
    numbers.add(7);
    numbers.add(3);
    numbers.add(9);
    System.out.println("Max: " + Collections.max(numbers));
    System.out.println("Min: " + Collections.min(numbers));
  }
}
برای بازی گونه کردن لیست، Collections.shuffle() ترتیب را تصادفی می کند.
import java.util.*;
public class Main {
  public static void main(String[] args) {
    ArrayList<String> cards = new ArrayList<>();
    cards.add("Ace");
    cards.add("King");
    cards.add("Queen");
    cards.add("Jack");
    Collections.shuffle(cards);
    System.out.println(cards);
  }
}
برای شمردن تکرار یک آیتم، از Collections.frequency() استفاده کن.
import java.util.*;
public class Main {
  public static void main(String[] args) {
    ArrayList<String> fruits = new ArrayList<>();
    fruits.add("Apple");
    fruits.add("Banana");
    fruits.add("Orange");
    fruits.add("Banana");
    fruits.add("Mango");
    int count = Collections.frequency(fruits, "Banana");
    System.out.println("Banana appears: " + count + " times");
  }
}
برای جابجایی دو عنصر، Collections.swap() سریع و ساده است.
import java.util.*;
public class Main {
  public static void main(String[] args) {
    ArrayList<String> fruits = new ArrayList<>();
    fruits.add("Apple");
    fruits.add("Banana");
    fruits.add("Orange");
    fruits.add("Mango");
    Collections.swap(fruits, 0, 2);
    System.out.println(fruits);
  }
}
سه گام تمرینی
- یک ArrayList بساز و چند مقدار اضافه کن.
- با ایتراتور پیمایش کن و چاپ کن.
- لیست را مرتب کن و سپس جستجوی دودویی انجام بده.
جمع بندی سریع
- الگوریتم های جاوا آماده و کاربردی هستند.
- برای جستجو، اول مرتب سازی را انجام بده.
- for-each ساده است؛ ایتراتور امن تر حذف می کند.
- max، min، shuffle، frequency و swap خیلی به دردبخورند.
