"

معکوس کردن آرایه در جاوا,معکوس کردن آرایه با حلقه for در جاوا ,معکوس کردن آرایه با () Collections.reverse در جاوا

معکوس کردن آرایه در جاوا

برای معکوس کردن آرایه در جاوا،یک حلقه for تا نصف طول اجرا کنید و عنصر i را با عنصر length-1-i جابه‌جا نمایید.این روش سریع است.

تیم تحریریه
6
0
21 اردیبهشت 1405
لینک کوتاه

معکوس کردن آرایه در جاوا (Reverse Array in Java) 

 ساده‌ترین روش برای معکوس کردن آرایه در جاوا، استفاده از حلقه for است.
ر این روش، یک حلقه تا نصف طول آرایه اجرا می‌شود و عنصر اول با آخر، دومی با یکی مانده به آخر، و ... جابه‌جا می‌گردد.
این روش بدون نیاز به حافظه اضافی و با پیچیدگی O(n) انجام می‌شود و برای همه نوع آرایه اعم از []int و []String قابل استفاده است.

اگر آرایه از نوع غیراولیه مانند []Integer یا []Stringباشد، می‌توان از متد ()Collections.reverse استفاده کرد.
کافی است آرایه را با ()Arrays.asList به لیست تبدیل کرده، سپس متد ()reverse را روی آن فراخوانی کنید.
این روش بسیار کوتاه و خواناست، اما روی آرایه‌های اولیه مانند []int کار نمی‌کند.

در جاوا ۸ به بالا، می‌توان با Stream API آرایه را معکوس کرد.
با ()IntStream.rangeClosed اندیس‌ها را تولید کرده و با ()map به ترتیب معکوس نگاشت می‌دهیم.
این روش آرایه اصلی را تغییر نمی‌دهد و یک آرایه جدید می‌سازد، ولی برای آرایه‌های بزرگ حافظه بیشتری مصرف می‌کند.



معکوس کردن آرایه در جاوا (Reverse Array in Java) 



روش اول: معکوس کردن آرایه با حلقه for در جاوا 

این روش ساده‌ترین و سریع‌ترین راه برای برعکس کردن آرایه در جاوا بدون استفاده از کتابخانه‌های اضافی است.

public class ReverseArrayExample {
    public static void main(String[] args) {
        int[] originalArray = {1, 2, 3, 4, 5};
        
        System.out.println("آرایه اصلی:");
        for (int num : originalArray) {
            System.out.print(num + " ");
        }
        
        // حلقه برای معکوس کردن آرایه
        for (int i = 0; i < originalArray.length / 2; i++) {
            int temp = originalArray[i];
            originalArray[i] = originalArray[originalArray.length - 1 - i];
            originalArray[originalArray.length - 1 - i] = temp;
        }
        
        System.out.println("\nآرایه معکوس شده:");
        for (int num : originalArray) {
            System.out.print(num + " ");
        }
    }
}


خروجی:
آرایه اصلی:
1 2 3 4 5 
آرایه معکوس شده:
5 4 3 2 1

توضیح گام به گام روش اول

  • از یک حلقه for استفاده می‌کنیم که فقط تا length/2 تکرار می‌شود.
  • عنصر اول با عنصر آخر، عنصر دوم با یکی مانده به آخر، و ... جابه‌جا می‌شوند.
  • متغیر temp به عنوان حافظه موقت برای جابه‌جایی استفاده می‌شود.
  • این روش بدون نیاز به آرایه کمکی است و پیچیدگی زمانی O(n/2) = O(n) دارد.





🚀 از صفر تا قهرمان جاوا، فقط با یک دوره!
به دنبال یه فرصت طلایی برای شروع برنامه‌نویسی می‌گردی؟
دوره آموزشی جاوا ما، همون چیزیه که نیاز داری!

✨ چرا این دوره رو انتخاب می‌کنی؟
🎯 از مبتدی تا حرفه‌ای
بدون پیش‌زمینه شروع می‌کنی و به یه برنامه‌نویس جاوا تبدیل می‌شی که بازار کار منتظرته!

🛠 پروژه‌محور و عملی
با انجام پروژه‌های واقعی، کدنویسی رو یاد می‌گیری، نه فقط تئوری!

👨‍🏫 پشتیبانی همیشگی
هرجا گیر کنی، تیم پشتیبانی کنارته تا مشکلت حل بشه.

🔓 دسترسی مادام‌العمر
هر وقت خواستی به محتوا دسترسی داری، برای همیشه!

 

🔥 همین حالا ثبت‌نام کن 







روش دوم: معکوس کردن آرایه با () Collections.reverse در جاوا

اگر آرایه شما از نوع نوع بسته‌بندی شده (Wrapper Class) مانند Integer باشد، می‌توانید از ()Collections.reverse استفاده کنید.

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class ReverseWithCollections {
    public static void main(String[] args) {
        // آرایه از نوع Integer (نه int)
        Integer[] array = {10, 20, 30, 40, 50};
        
        System.out.println("آرایه اصلی: " + Arrays.toString(array));
        
        // تبدیل آرایه به لیست
        List<Integer> list = Arrays.asList(array);
        
        // معکوس کردن لیست
        Collections.reverse(list);
        
        // تبدیل مجدد به آرایه (اختیاری)
        array = list.toArray(array);
        
        System.out.println("آرایه معکوس شده: " + Arrays.toString(array));
    }
}

خروجی:

آرایه اصلی: [10, 20, 30, 40, 50]
آرایه معکوس شده: [50, 40, 30, 20, 10]




مزایا و معایب روش ()Collections.reverse در جاوا

بسیار ساده و خوانا

✅ کوتاه و بدون حلقه دستی

❌ فقط برای آرایه‌های از نوع غیر اولیه (Integer, String, Double, ...) کار می‌کند

❌ برای []int[]، double[]، char مستقیم قابل استفاده نیست


مزایا و معایب روش ()Collections.reverse در جاوا

روش سوم: معکوس کردن آرایه با Stream در جاوا (Java 8 به بالا)

اگر با جاوا ۸ یا بالاتر کار می‌کنید، می‌توانید از Stream API برای معکوس کردن آرایه استفاده کنید.


import java.util.Arrays;
import java.util.stream.IntStream;

public class ReverseWithStream {
    public static void main(String[] args) {
        int[] array = {100, 200, 300, 400, 500};
        
        System.out.println("آرایه اصلی: " + Arrays.toString(array));
        
        // معکوس کردن با استفاده از Stream
        int[] reversedArray = IntStream.rangeClosed(0, array.length - 1)
                .map(i -> array[array.length - 1 - i])
                .toArray();
        
        System.out.println("آرایه معکوس شده: " + Arrays.toString(reversedArray));
    }
}

خروجی:

آرایه اصلی: [100, 200, 300, 400, 500]
آرایه معکوس شده: [500, 400, 300, 200, 100]

توضیح روش Stream:

  • IntStream.rangeClosed(0, array.length - 1) یک جریان از اندیس‌ها ایجاد می‌کند.
  • map(i -> array[array.length - 1 - i]) هر اندیس را به عنصر معکوس نگاشت می‌دهد.
  • ()toArray جریان را به آرایه جدید تبدیل می‌کند.

✅ مناسب برای کدنویسی تابعی (Functional Programming)
❌ یک آرایه جدید ایجاد می‌کند (حافظه اضافی مصرف می‌شود)

روش چهارم: معکوس کردن آرایه دو بعدی در جاوا

گاهی نیاز دارید آرایه دو بعدی را معکوس کنید. در اینجا روشی برای جابه‌جایی سطرها:


public class Reverse2DArray {
    public static void main(String[] args) {
        int[][] matrix = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };
        
        System.out.println("ماتریس اصلی:");
        printMatrix(matrix);
        
        // معکوس کردن سطرهای ماتریس
        for (int i = 0; i < matrix.length / 2; i++) {
            int[] temp = matrix[i];
            matrix[i] = matrix[matrix.length - 1 - i];
            matrix[matrix.length - 1 - i] = temp;
        }
        
        System.out.println("\nماتریس با سطرهای معکوس:");
        printMatrix(matrix);
    }
    
    public static void printMatrix(int[][] matrix) {
        for (int[] row : matrix) {
            for (int val : row) {
                System.out.print(val + " ");
            }
            System.out.println();
        }
    }
}

خروجی:

ماتریس اصلی:
1 2 3 
4 5 6 
7 8 9 

ماتریس با سطرهای معکوس:
7 8 9 
4 5 6 
1 2 3

مقایسه روش‌های مختلف معکوس کردن آرایه در جاوا

روش  مزایا      معایب    مناسب برای
حلقه for بدون حافظه اضافی، سریع کدنویسی دستی آرایه‌های اولیه و غیراولیه
()Collections.reverse   کوتاه و خوانا   فقط برای آرایه‌های غیراولیه []Integer[], String, ...
Stream API مدرن و تابعی ایجاد آرایه جدید   پروژه‌های جاوا ۸+
جابه‌جایی درجا (In-place) کمترین مصرف حافظه نیاز به متغیر موقت   محدودیت حافظه



 
 
  
   

ساده‌ترین روش معکوس کردن آرایه در جاوا (تک خطی)

اگر می‌خواهید ساده‌ترین روش را فقط در یک خط کد انجام دهید:

1. برای آرایه از نوع Integer


Collections.reverse(Arrays.asList(yourArray));

2. برای آرایه از نوع []int (با استفاده از Apache Commons Lang)


ArrayUtils.reverse(yourArray);
(نیاز به اضافه کردن کتابخانه Apache Commons Lang دارد)

خطاهای رایج در معکوس کردن آرایه

  • استفاده از حلقه نادرست

    اگر حلقه را از ۰ تا length اجرا کنید، آرایه دو بار معکوس می‌شود و به حالت اول برمی‌گردد.
  • فراموشی متغیر موقت (temp)

    در روش جابه‌جایی درجا، حتماً از temp استفاده کنید.
  • استفاده از Collections.reverse روی []int

    Collections.reverse فقط روی List<T> کار می‌کند، نه []int.
  • اندیس خارج از محدوده

    دقت کنید در حلقه از length - 1 - i استفاده کنید.


خطاهای رایج در معکوس کردن آرایه

تمرین عملی پیشنهادی

برنامه‌ای بنویسید که یک آرایه از اعداد تصادفی ساخته، آن را معکوس کرده و سپس مجموع عناصر آرایه اصلی و معکوس شده را مقایسه کند (باید برابر باشند).

import java.util.Arrays;
import java.util.Random;

public class ReverseExercise {
    public static void main(String[] args) {
        Random rand = new Random();
        int[] arr = rand.ints(10, 1, 100).toArray();
        
        System.out.println("آرایه اصلی: " + Arrays.toString(arr));
        
        int sumOriginal = Arrays.stream(arr).sum();
        
        // معکوس کردن
        for (int i = 0; i < arr.length / 2; i++) {
            int temp = arr[i];
            arr[i] = arr[arr.length - 1 - i];
            arr[arr.length - 1 - i] = temp;
        }
        
        System.out.println("آرایه معکوس: " + Arrays.toString(arr));
        
        int sumReversed = Arrays.stream(arr).sum();
        System.out.println("مجموع اصلی: " + sumOriginal + " - مجموع معکوس: " + sumReversed);
        System.out.println("مجموع برابر است: " + (sumOriginal == sumReversed));
    }
}

جمع‌بندی نهایی

 انواع روش های  معکوس کردن آرایه در جاوا شامل:

روش اول: معکوس کردن آرایه با حلقه for (ساده، سریع، بدون حافظه اضافی)

روش دوم: استفاده از ()Collections.reverse برای آرایه‌های غیراولیه

روش سوم: معکوس کردن آرایه با Stream در جاوا ۸

روش چهارم: معکوس کردن آرایه دو بعدی

برای بیشترین کارایی و سازگاری با همه نوع آرایه، روش حلقه for بهترین انتخاب است.
برای خوانایی کد و آرایه‌های غیراولیه، از ()Collections.reverse استفاده کنید.
اگر از جاوا ۸ به بالا استفاده می‌کنید و کدنویسی تابعی را ترجیح می‌دهید، Stream API گزینه عالی است.

سوالات متداول (FAQ)

سوال ۱: آیا می‌توان آرایه رشته‌ای را معکوس کرد؟

بله، دقیقاً به همان روش‌های بالا، فقط نوع آرایه را []String قرار دهید.

سوال ۲: کدام روش سریع‌ترین است؟

روش حلقه for دستی بدون آرایه کمکی (In-place reversal) سریع‌ترین است.

سوال ۳: چرا Collections.reverse روی []int کار نمی‌کند؟

چون int نوع اولیه (primitive) است و Collections.reverse فقط با List<T> کار می‌کند که T باید یک کلاس باشد (مانند Integer).

سوال ۴: آیا روشی برای معکوس کردن آرایه بدون تغییر آرایه اصلی وجود دارد؟

بله، در روش Stream یک آرایه جدید ساخته می‌شود و آرایه اصلی تغییر نمی‌کند.

محصولات مرتبط

کاربران ما

شما هم نظرتون با ما دریاره “معکوس کردن آرایه در جاوا” اشتراک بزارید

برای ارسال نظر لطفا ورود یا ثبت نام کنید

منو