Pessoal,
criei uma classe Vetor Generica:
public class Vetor<T> implements br.com.vector.IVetor<T> {
T[] vetor;
int qntElementos = 0;
public Vetor(int tam) {
vetor = (T[]) new Object[tam];
}
public boolean isEmpty() {
return Tamanho() == 0;
}
@Override
public void Adicionar(T elemento) {
if (Tamanho() == vetor.length) {
redimensionar();
}
for (int i = 0; i < vetor.length; i++) {
if (vetor[i] == null) {
vetor[i] = (T) elemento;
qntElementos++;
break;
}
}
}
@Override
public void Adicionar(int posicao, T elemento) throws ArrayIndexOutOfBoundsException {
redimensionar();
vetor[posicao] = null;
vetor[posicao] = (T) elemento;
qntElementos++;
}
@Override
public void AdicionarInicio(T elemento) {
redimensionar();
for(int i = Tamanho(); i >= 0; i--){
vetor[i+1] = vetor[i];
}
vetor[0] = elemento;
qntElementos++;
}
@Override
public void Remover(int posicao) throws ArrayIndexOutOfBoundsException {
if (isEmpty()) {
throw new ArrayIndexOutOfBoundsException("Vazio");
}
if (posicao < vetor.length) {
vetor[posicao] = null;
qntElementos--;
} else {
System.out.println("Posição inexistente!!!");
}
}
@Override
public void Remover(T elemento) {
if (contem(elemento) == false) {
System.out.println("Elemento nao encontrado!!!");
}
for (int i = 0; i < vetor.length; i++) {
if (vetor[i].equals(elemento)) {
vetor[i] = null;
break;
}
}
}
@Override
public void RemoverInicio() {
if (isEmpty()) {
System.out.println("Vetor vazio!");
}
for (int i = 0; i < vetor.length; i++) {
if (vetor[i] != null) {
vetor[i] = null;
break;
}
qntElementos--;
}
}
@Override
public void RemoverFim() {
if (isEmpty()) {
System.out.println("Vetor vazio!");
}
for (int i = 0; i < vetor.length; i++) {
if (vetor[i] == null) {
vetor[i - 1] = null;
}
qntElementos--;
break;
}
vetor[Tamanho()] = null;
}
@Override
public int Tamanho() {
return qntElementos;
}
@Override
public void Limpar() {
for (int i = 0; i < vetor.length; i++) {
if (vetor[i] != null) {
vetor[i] = null;
qntElementos--;
}
}
}
@Override
public boolean contem(T elemento) {
for (int i = 0; i < vetor.length; i++) {
if (elemento.equals(vetor[i])) {
return true;
}
}
return false;
}
public void imprimir() {
for (T elemento : vetor) {
System.out.println(elemento);
}
}
public String toString(){
StringBuilder sb = new StringBuilder();
sb.append("[");
for(int i =0; i < Tamanho(); i++){
sb.append(vetor[i]);
sb.append(" ");
}
sb.append("]");
return sb.toString();
}
public void redimensionar(){
T[] novoVetor = (T[]) new Object[vetor.length * 2];
if(vetor.length == Tamanho()){
for(int i =0; i < vetor.length; i++){
novoVetor[i] = vetor[i];
}
vetor = novoVetor;
}
}
@Override
public boolean equals(Object obj) {
if(vetor.getClass() == obj.getClass()){
return true;
}else{
return false;
}
}
}
e gostaria de saber como usar a classe ordenação, essa não criei:
public class Sorte {
public static void bolha(Object[] a, Comparator c) {
int fim;
boolean troquei;
Object temp;
fim = a.length - 1;
do {
troquei = false;
for (int i = 0; i <= fim - 1; i++) {
if (c.compare(a[i], a[i + 1]) > 0) {
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
troquei = true;
}
}
fim--;
} while (troquei);
}
public static void selecao(Object[] a, Comparator c) {
int k, iMenor;
Object temp;
for (int i = 0; i < +a.length; i++) {
iMenor = i;
for (k = i + 1; k <= a.length - 1; k++) {
if (c.compare(a[k], a[iMenor]) < 0) { //Comparacao " < 0 " serve para listar em ordem decrescente
iMenor = k;
}
}
temp = a[i];
a[i] = a[iMenor];
a[iMenor] = temp;
}
}
public static void insercao(Object[] a, Comparator c) {
int k;
Object temp;
for (int i = 0; i <= a.length - 1; i++) {
k = i;
temp = a[i];
while ((k > 0) && (c.compare(temp, a[k - 1]) < 0)) {
a[k] = a[k - 1];
k--;
}
a[k] = temp;
}
}
public static final Random random = new Random();
private static void trocar(Object[] a, int i, int j) {
Object temp = a[i];
a[i] = a[j];
a[j] = temp;
}
private static int particao(Object[] a, Comparator c, int primeiro, int ultimo) {
int x = primeiro + random.nextInt(ultimo - primeiro + 1);
//System.out.println("X: " + x);
Object pivo = a[x];
trocar(a, x, ultimo);
for (int i = x = primeiro; i < ultimo; ++i) {
if (c.compare(a[i], pivo) <= 0) {
trocar(a, x++, i);
}
}
trocar(a, x, ultimo);
return (x);
}
private static void Sort(Object[] a, Comparator c, int primeiro, int ultimo) {
if (ultimo > primeiro) {
int x = particao(a, c, primeiro, ultimo);
Sort(a, c, primeiro, x - 1);
Sort(a, c, x + 1, ultimo);
}
}
public static void quickSort(Object[] a, Comparator c) {
Sort(a, c, 0, a.length - 1);
}
}
Estou tentando usar assim: - Mas não sei qual o segundo parametro que devo usar:
Vetor<Integer> vetor = new Vetor(5);
vetor.Adicionar(6);
vetor.Adicionar(3);
vetor.Adicionar(9);
vetor.Adicionar(2);
vetor.Adicionar(4);
System.out.println(vetor.toString());
System.out.println("");
Sorte.bolha(vetor, \\Aqui não sei o qual usar\\);