Ordenação de ArrayList com BubbleSort

Bom dia a todos,

Estou tendo problemas para organizar meu ArrayList de acordo com dois parâmetros. O exercício tratasse de um escalonador de processos com Round Robin, utilizando prioridade e entrada como parâmetros principais. Quem tem a menor entrada e a maior prioridade, é executado primeiro. A questão é que na hora de cadastrar esses “processos”, eles não são cadastrados na ordem correta e sim numa ordem aleatória. Então resolvi fazer dois métodos bubble sort para ordena-los assim que eu acabo de criar o ArrayList.

Fiz os testes só com 2 elementos no array e recebi o erro Exception in thread "main" java.lang.OutOfMemoryError: Java heap space. Gostaria de saber se existe uma maneira mais fácil para organiza-lo utilizando esses dois parâmetros.

O primeiro elemento do Array teria que ser: MenorEntrada e MaiorPrioridade. O segundo poderia ter a Entrada igual a do primeiro mas teria que ter uma prioridade menor.

Obs: Entrada varia de 0 até n e Prioridade varia de 1 até 9.

Abaixo segue o código de ordenação que havia feito.

public void ordenarArrayEntrada() {
        for (int i = 0; i < meusProcessos.size(); i++) {
            for (int j = 0; i < (meusProcessos.size() - 1); j++) {
                if (meusProcessos.get(j).getEntrada()
                        > meusProcessos.get(j + 1).getEntrada()) {
                    Processos aux = meusProcessos.get(j);
                    meusProcessos.add(j, meusProcessos.get(j + 1));
                    meusProcessos.add(j + 1, aux);
                }
            }
        }
    }

    public void ordenarArrayPrioridade() {
        for (int i = 0; i < meusProcessos.size(); i++) {
            for (int j = 0; i < (meusProcessos.size() - 1); j++) {
                if (meusProcessos.get(j).getPrioridadeDin()
                        < meusProcessos.get(j + 1).getPrioridadeDin()) {
                    Processos aux = meusProcessos.get(j);
                    meusProcessos.add(j, meusProcessos.get(j + 1));
                    meusProcessos.add(j + 1, aux);
                }
            }
        }
    }

Desde já,
Agradeço a ajuda!

Você é obrigado a usar o Bubble Sort ou pode usar qualquer método de ordenação?

O jeito mais simples seria usar Collections.sort() no seu Arraylist, e ajustando o Comparator para ordenar da forma que você quiser. Leia mais em: http://blog.caelum.com.br/ordenando-colecoes-com-comparable-e-comparator/

Abraço.

Então, não obrigatoriamente mas como eu não estava entendendo o Collections.sort() preferir fazer por Bubble, mas agora consegui usar o Collections.sort()! Mas tenho um problema. Consegui ordenar baseado em dois atributos, porém uma das ordenações é inversa. E isso não estou conseguindo fazer. Preciso que a ordenação de ENTRADA seja de 0 até n e de PRIORIDADE de 9 até 1;

Exemplo: O 1º elemento seria ENTRADA = 0 e PRIORIDADE = 9;

Abaixo código do Collections.sort():

public void ordenarArrayEntrada() {
        Collections.sort(meusProcessos, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                Integer entrada1 = ((Processos) o1).getEntrada();
                Integer entrada2 = ((Processos) o2).getEntrada();
                Integer entrada = entrada1.compareTo(entrada2);

                if (entrada != 0) {
                    return entrada;
                } else {    
                    Integer prioridade1 = ((Processos) o1).getPrioridadeDin();
                    Integer prioridade2 = ((Processos) o2).getPrioridadeDin();
                    return prioridade1.compareTo(prioridade2);
                }
            }
        });
    }

Como faço para esse ELSE da PRIORIDADE ficar inverso sem mexer no da ENTRADA?

Desde já,
Agradeço a ajuda.

Só um palpite pois não tenho como testar, mas inverta a comparação de prioridade. Supondo que é a última, faça algo como:

Integer prioridade1 = ((Processos) o1).getPrioridadeDin();
Integer prioridade2 = ((Processos) o2).getPrioridadeDin();
return prioridade2.compareTo(prioridade1); // note que prioridade2 e prioridade1 foram invertidos aqui

Abraço.

Funcionou! Muito obrigado!

Sendo assim as dúvidas foram sanadas! Muito obrigado a todos que postaram.