[size=12]Pessoal,
Alguém por gentileza, poderia me dar um norte de como implementar os tipos abstratos descritos nesta atividade? criei uma interface chamada ListSet e utilizei o implements nas classes ListSetArranjo e ListSetApontador. Mas não tenho certeza se devo estender de hashSet, ArrayList, ou seja to perdida. Sei que meu codigo ta confuso, mas vou postar para ver se alguém me ajuda com a lógica que devo usar. Já estou a alguns dias tentando codificar esta atividade.[/size]
Atividade:
Parte 01
Um Conjunto é definido como uma coleção arbitrária de elementos. Não existem elementos duplicados em um conjunto.
Algumas definições básicas de conjuntos:
- Elemento: é um componente ou instância de um conjunto.
- Pertinência: é uma característica dos elementos que pertencem a um conjunto.
- Cardinalidade: corresponde ao número de elementos de um conjunto.
Algumas operações podem ser definidas sobre conjuntos. Os resultados destas operações são também conjuntos.
- A união de dois conjuntos A e B, denotada por , é o conjunto definido como
- A interseção de dois conjuntos A e , denotada por , é o conjunto definido como
- A diferença do conjunto A pelo conjunto B, denotada por , é o conjunto definido como
- A diferença simultânea dos conjuntos A e B, denotada por , é o conjunto definido como
Uma Lista é definida como uma seqüência mutável de zero ou mais itens na forma A0, A1,?,An-1 onde n é o tamanho da lista e Ai são elementos de um determinado tipo, estruturados da seguinte forma: Pede-se: 1) Implemente os Tipos Abstrato de Dados ListSet e OrderedListSet. Você deverá apresentar duas implementações para cada TAD: uma com arranjos e outra com apontadores. O TAD ListSet possue as propriedades dos Conjuntos e das Listas e TAD OrderedListSet possue as propriedades dos Conjuntos e das Listas Ordenadas. Os TADs devem possuir pelo menos os seguintes métodos públicos: Nota: Para o TAD OrderedListSet substitua o tipo Object pelo tipo Comparable nas assinaturas dos diversos métodos. 2) Defina a complexidade assintótica do pior e do melhor caso dos diversos métodos públicos dos TAD ListSet e OrderedListSet para ambas as representações (arranjos e apontadores). 3) Você foi contratado para fazer um estudo mercadológico dos clientes de duas lojas em um determinado ramo de negócio. Para efeito deste estudo, criou-se a seguinte classificação para os clientes: Apresente também os mesmos relatórios com os clientes listados em ordem alfabética. Notas:
- O elemento Ai está na i-ésima
- Ai precede Ai+1 (para 0 <= i < n-1)
- Ai+1 sucede Ai (para 0 <= i < n-2)
- O predecessor de A0 e o sucessor de An-1 não são definidos
Em uma Lista Ordenada os elementos possuem ainda a seguinte propriedade de ordem.
- A0
boolean isEmpty()
int size()
void addElement (Object elem)
void removeElementAt (Object elem, int index) throws OutOfBoundsException
Object elementAt(int index) throws OutOfBoundsException
ListSet union(ListSet set)
ListSet intersection(ListSet set)
ListSet difference(ListSet set)
ListSet symDif(ListSet set)
Cliente Oportunista: Procura sempre a melhor oportunidade de negócio, isto é, compra sempre na loja com o melhor preço.
Cliente Fiel: Compra sempre na mesma loja.
Você está recebendo dois arquivos texto com a relação dos clientes de duas lojas distintas e um arquivo Java com o tipo Cliente. Complemente o código da classe Cliente com o código necessário.
Você deverá criar uma aplicação que leia os arquivos com os nomes dos clientes de cada loja e apresente os seguintes relatórios:
A lista de todos os clientes.
A lista de todos os clientes Fiéis?
A lista de todos os Clientes Oportunista?
A lista dos Clientes Fiéis somente da Loja A.
a) A sua aplicação deverá utilizar os tipos ListSet e OrderedListSet.
b) Os elementos adicionados as listas-conjuntos devem ser instâncias da classe Cliente.
c) Entregue uma aplicação que utilize a representação dos tipos com arranjos e outra que utilize a versão com apontadores.package tda;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/**
*
* @author Soraya
*/
public class ListSetArranjo extends HashSet<Object>implements ListSet{
protected List list = new ArrayList();
public ListSetArranjo(final ListSet listSet) {
// Não aceita itens duplicados
int size = listSet.size();
for (int i=0; i<size; i++) {
Object obj = listSet.get(i);
if (listSet.indexOf(obj) != listSet.lastIndexOf(obj)) {
throw new IllegalArgumentException
("A lista contém itens duplicados");
}
}
// this.list = listSet.list;
}
public ListSetArranjo() {
this(new ListSetArranjo());
}
public boolean isEmpty() {
return this.list.isEmpty();
}
public int size() {
return this.list.size();
}
public void addElement(Object elem) {
if (!this.list.contains(elem)){
this.list.add(elem);
}
}
public void removeElementAt(Object elem, int index) {
if (!this.list.remove(elem)){
throw new ArrayIndexOutOfBoundsException(index);
}
}
public Object elementAt(int index){
int i = 0;
Iterator iter = this.list.iterator();
while (i < index) {
i++;
iter.next();
}
return iter.next();
}
public ListSet union(ListSet set) {
ListSet u = new ListSetArranjo(set); // Copia o conjunto atual
u.addAll(set); // Adiciona o segundo conjunto
return u; // Retorna um novo conjunto com a união.
}
public ListSet intersection(ListSet set) {
ListSet i = new ListSetArranjo(set); // Copia o conjunto atual
i.retainAll(set); // pega os itens em comum
return i; // Retorna um novo conjunto com a interseção.
}
public ListSet difference(ListSet set) {
ListSet d = new ListSetArranjo(set); // Copia o conjunto atual
d.removeAll(set); // remove os itens do segundo conjunto
return d; // Retorna um novo conjunto com a diferença.
}
public ListSet symDif(ListSet set) {
ListSet s = new ListSetArranjo(set);// Copia o conjunto atual
s.addAll (set);// Adiciona o segundo conjunto
ListSet tmp = new ListSetArranjo(set);// Copia o conjunto atual no bkp
tmp.retainAll (set);// pega os itens em comum
s.removeAll (tmp);// remove os itens em comum
return s;
}