Pilha Estrutura de Dados Manipulação

Bom dia estou estudando programação em JAVA em Estrutura de Dados e estou com dificuldade para aplicar um Método em uma Classe Pilha criada;
Bom a Atividade é a seguinte;
Desenvolva para a classe pilha o método:

  • ordenar()
    Como resultado da execução do método ordenar teremos a pilha com seus dados ordenado, sendo o maior no topo e o menor na base.
    Podes utilizar variáveis auxiliar, mas somente pilhas como estruturas “maiores” (não utilizar vetores e/ou arraylist).
    Pelo que entendi posso usar os métodos empilhar e desempilhar ou em outras palavras inserir e retirar dados na pilha e manipulando eles criar novas estruturas de pilha pra ordenar de forma decrescente os dados na pilha .

Minha Classe Pilha Abaixo:

package EstruturaDeDadosI;

public class PilhaObjeto {
private Object item[];
private int topo;
private int tamanhoDaPilha; // Capacidade maxima

public PilhaObjeto() { // Cria uma Pilha vazia       
    this.tamanhoDaPilha = 1000;
    this.item = new Object[1000];
    this.topo = -1;
}

public PilhaObjeto(int TamMax) { //Cria uma Pilha vazia
    this.tamanhoDaPilha = TamMax ;
    this.item = new Object[TamMax];
    this.topo = -1;
}

public Object empilha(Object novo) {
    if (this.topo == (this.tamanhoDaPilha-1))// if (this.cheia())
    {
        return null;
    }
    this.item[++this.topo] = novo;
    return novo;
}

public Object desempilha() {
    if (this.vazia()) //if (this.topo == -1)
    {
        return null;
    }
    return this.item[this.topo--];
}

public Object doTopo() {
    if (this.vazia()) //if (this.topo == -1)
    {
        return null;
    }
    return this.item[this.topo];
}

public boolean vazia() {
    return (this.topo == -1);
}

public boolean cheia() {
    return (this.topo == (this.tamanhoDaPilha-1));
}

public int qtd() {
    return (this.topo + 1);
}

public int vagos() {
    return (this.tamanhoDaPilha - (this.topo+1));
}

}
`package pilhas;

import EstruturaDeDadosI.;
import javax.swing.
;

public class TestaPilha {
public static void main (String[] args) {
int i=0, max=5;
PilhaObjeto pilha = new PilhaObjeto (max);
Integer elemento = null;

java.util.Random random = new java.util.Random ();
pilha.empilha(-10);
System.out.println ("Quantos elementos estão na pilha "+ pilha.qtd());
System.out.println ("\n\n\t\tInserindo Elementos");
// Insere cada elemento na pilha
while (pilha.empilha(i*10) != null){
    System.out.println ("Inserido na pilha: ("+pilha.doTopo()+") " +pilha.doTopo() +
                     "   Quantos elementos estão na pilha "+ pilha.qtd());
    i++;
}


System.out.println ("Tamanho da pilha: " + pilha.qtd());
System.out.println ("\n\n\t\tRetirando Elementos");
 // Desempilha cada chave

elemento =(Integer) pilha.desempilha ();
while (elemento != null){
     System.out.println ("Retirado na pilha: " + elemento +
                     "  Quantos elementos estão na pilha "+ pilha.qtd());
     elemento =(Integer) pilha.desempilha ();
}

System.out.println ("Tamanho da pilha: " + pilha.qtd());

/Comentário;
String Nome, Saida;
Nome = JOptionPane.showInputDialog(“Informe seu nome:”);
pilha.empilha(Nome);
Saida = (String)pilha.desempilha ();
// get the user’s input. note that if they press Cancel, ‘name’ will be null
System.out.printf(“Nome informado ‘%s’.\n”, Nome);
System.out.printf(“Nome informado ‘%s’.\n”, Saida);
/
}
}

Gostaria de Ajuda para implementar esse Método ordenar() conforme especificado acima;agradeço desde já.
Abraço.
`

Dá uma olhada nesse método:

https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#sort-java.lang.Object:A-int-int-

Usa ele assim:

Object[] array = ...; //no caso aqui é o da tua pilha
Arrays.sort(array, 0, topo); // ordena os objetos dentro do array, do índice 0 até o índice topo (onde estão os objetos da sua pilha)

Detalhe: a documentação diz que os objetos precisam implementar a interface Comparable, para que a comparação possa ser feita.