Arrays é uma agrupamento estático(não pode mudar de tamanho) de elementos de um mesmo tipo. Por exemplo:
// cria um array de Produto com 5 posições.
// todas as posições começam nulas
Produto[] produtos = new Produto[5];
// para usar:
// os índices começam sempre do zero
// primeiro produto, Sabão a 1 real.
produto[0] = new Produto("Sabão", 1.00);
// se quiser iterar por todos os produtos:
for (Produto p : produtos)
System.out.println(p);
Bem, o teu primeiro problema é que arrays não crescem, portanto se você tiver uma venda, não dá para adicionar um novo produto caso o array estiver cheio.
Nestes casos, e praticamente em todos os casos, utilizamos as Collections:
public class Venda {
class ItemVenda {
Produto p;
int qtd;
ItemVenda(Produto p, int qtd) {
this.p = p;
this.qtd = qtd;
}
public void adicionar(int qtd) {
this.qtd += qtd;
}
}
private long idVenda;
private Vendedor vendedor;
// uso um mapa para achar rapidamente o item.
private Map<Produto, ItemVenda> itens = new HashMap<Produto, ItemVenda>();
public void adicionar(Produto p, int quantidade) {
ItemVenda item = itens.get(p);
if (item == null) // se não tiver
item = new ItemVenda(p, quantidade);
itens.put(p, item); // adiciona o item à coleção
else // se tiver, atualiza a quantidade
item.adiciona(quantidade);
}
public void remover(Produto p) {
itens.remove(p);
}
}
Neste caso nem precisa se preocupar que a coleção de itens vai crescer automaticamente.