Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách sắp xếp Stack trong Android

Giới thiệu

Ví dụ này minh họa cách sắp xếp (sort) một Stack trong Android. Vì Stack không hỗ trợ sắp xếp trực tiếp, chúng ta chuyển sang List/Set để sắp xếp.

Bước 1: Tạo dự án mới

Mở Android Studio, chọn File → New Project và điền đầy đủ thông tin cần thiết.

Bước 2: Thiết kế giao diện (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="30sp"
        android:gravity="center"
        android:padding="16dp" />

</LinearLayout>

Bước 3: MainActivity.java

package com.example.myapplication;

import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Stack;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Stack stack = new Stack<>();
        stack.add(1);
        stack.add(10);
        stack.add(9);
        stack.add(4);
        stack.add(3);
        stack.add(2);

        // Cách 1: Chuyển sang ArrayList, sort, rồi chuyển lại (giữ trùng lặp)
        ArrayList list = new ArrayList<>(stack);
        Collections.sort(list); // Tăng dần
        // Collections.sort(list, Collections.reverseOrder()); // Giảm dần

        // Cách 2: Dùng TreeSet (tự động sắp xếp + loại trùng lặp)
        // java.util.TreeSet sortedSet = new TreeSet<>(stack);

        TextView textView = findViewById(R.id.text);
        textView.setText("Stack gốc: " + stack + 
            "\n\nĐã sắp xếp (giữ trùng lặp): " + list);
            // + "\n\nTreeSet (không trùng lặp): " + sortedSet);
    }
}

Chạy ứng dụng

Kết nối thiết bị Android thật với máy tính. Trong Android Studio, nhấn Run và chọn thiết bị để chạy.

Kết quả

Stack gốc: [1, 10, 9, 4, 3, 2] (top = 2)

Đã sắp xếp tăng dần: [1, 2, 3, 4, 9, 10]

Giải thích và các phương pháp

Phương phápGiữ trùng lặpThứ tựĐộ phức tạp
ArrayList + Collections.sort()CóTăng/Giảm dầnO(n log n)
TreeSetKhông (loại trùng)Tăng dần tự nhiênO(n log n)
PriorityQueueCóTăng dần (min-heap)O(n log n)

Lưu ý quan trọng: Stack kế thừa Vector, là LIFO (Last In First Out). Phần tử "top" là phần tử cuối cùng thêm vào. Sắp xếp Stack thực chất là sắp xếp các phần tử bên trong, không thay đổi bản chất LIFO.

Code gốc dùng HashSet (không giữ thứ tự) + hiển thị toString() ngẫu nhiên. Đã sửa dùng ArrayList + Collections.sort() để có kết quả xác định, có thứ tự.