package oo3; public class Pessoa { public void casaCom(Pessoa outraPessoa) { if (this.conjuge == null) { this.conjuge = outraPessoa; outraPessoa.casaCom(this); } } private String nome; private Pessoa conjuge; // coleção add, remove, getIndex private Pessoa[] dependentes = new Pessoa[5]; public void addDependente(Pessoa p) { for (int i = 0; i < dependentes.length; i++) { if (dependentes[i] == null) { dependentes[i] = p; break; } } } public void removeDependente(Pessoa p) { } // ["a,"b", null, null, "c"] public Pessoa[] getDependentes() { int tam = 0; for (int i = 0; i < dependentes.length; i++) { if (dependentes[i] != null) tam++; } Pessoa[] novo = new Pessoa[tam]; for (int i = 0, j = 0; i < dependentes.length; i++) { if (dependentes[i] != null) { novo[j++] = dependentes[i]; } } return novo; } // generate getters/setters, constructor // hashCode and equals, toString public Pessoa(String nome) { this.nome = nome; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((nome == null) ? 0 : nome.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Pessoa other = (Pessoa) obj; if (nome == null) { if (other.nome != null) return false; } else if (!nome.equals(other.nome)) return false; return true; } @Override public String toString() { return nome; } public Pessoa getConjuge() { return conjuge; } }