interface ILink<E>{
public void add(E e);
public int size();
public boolean isEmpty();
public Object [] toArray();
public E get(int index);
public void set(int index,E data);
public boolean contains(E data);
public void remove(E data);
public void clean();
}
class ILinkImpl<E> implements ILink<E>{
private class Node{
private Node next;
private E data;
public Node(E data){
this.data = data;
}
public void addNode(Node newNode){
if(this.next == null){
this.next = newNode;
}else{
this.next.addNode(newNode);//保存节点
}
}
public void toArrayNode(){
ILinkImpl.this.returnData[ILinkImpl.this.foot ++] = this.data;
if(this.next != null){
this.next.toArrayNode();
}
}
public E getNode(int index){
if(ILinkImpl.this.foot ++ == index){
return this.data;
}else{
return this.next.getNode(index);
}
}
public void setNode(int index,E data){
if(ILinkImpl.this.foot ++ == index){
this.data = data;
}else{
this.next.setNode(index,data);
}
}
public boolean containsNode(E data){
if(data.equals(this.data)){
return true;
}else{
if(this.next != null){
return this.next.containsNode(data);
}else{
return false;
}
}
}
public void removeNode(Node previous,E data){
if(this.data.equals(data)){
previous = this.next;
}else{
this.next.removeNode(this,data);
}
}
}
private Node root;
private int count;
private int foot;
private Object [] returnData;
public void add(E e){
if(e == null){
return ;
}
Node newNode = new Node(e);
if(this.root == null){
this.root = newNode;
}else{
this.root.addNode(newNode);//保存数据
}
this.count ++;
}
public int size(){
return this.count;
}
public boolean isEmpty(){
return this.root == null;
}
public Object [] toArray(){
if(this.root == null){
return null;
}
this.foot = 0;
this.returnData = new Object[this.count];
this.root.toArrayNode();
return this.returnData;
}
public E get(int index){
if(index >= this.count){
return null;
}
this.foot = 0;
return this.root.getNode(index);
}
public void set(int index,E data){
if(data == null){
return ;
}
this.foot = 0;
this.root.setNode(index,data);
}
public boolean contains(E data){
if(data == null){
return false;
}
return this.root.containsNode(data);
}
public void remove(E data){
if(this.contains(data)){
if(this.root.data.equals(data)){
this.root = this.root.next;
}else{
this.root.removeNode(this.root,data);
}
this.count --;
}
}
public void clean(){
this.count = 0;
this.root = null;
}
}
class ShopPet{
private ILink<Pet> allPets = new ILinkImpl<Pet>();
public void add(Pet pet){
this.allPets.add(pet);
}
public void remove(Pet pet){
this.allPets.remove(pet);
}
public ILink<Pet> search(String keyword){
ILink<Pet> searchResult = new ILinkImpl<Pet>();
Object [] result = allPets.toArray();
if(result !=null){
for(Object obj : result){
Pet pet = (Pet) obj;
if(pet.getName().contains(keyword) ||
pet.getColor().contains(keyword)){
searchResult.add(pet);
}
}
}
return searchResult;
}
}
interface Pet{
public String getName();
public String getColor();
}
class Cat implements Pet{
private String name;
private String color;
public Cat(String name,String color){
this.name = name;
this.color = color;
}
public String getName(){
return this.name;
}
public String getColor(){
return this.color;
}
public boolean equals(Object obj){
if(obj == null){
return false;
}
if(!(obj instanceof Cat)){
return false;
}
if(obj == this){
return true;
}
Cat cat = (Cat) obj;
return this.name.equals(cat.getName()) && this.color.equals(cat.getColor());
}
public String toString(){
return "【宠物信息:】名称:" + this.name + "、颜色:" + this.color;
}
}
class Dog implements Pet{
private String name;
private String color;
public Dog(String name,String color){
this.name = name;
this.color = color;
}
public String getName(){
return this.name;
}
public String getColor(){
return this.color;
}
public boolean equals(Object obj){
if(obj == null){
return false;
}
if(!(obj instanceof Dog)){
return false;
}
if(obj == this){
return true;
}
Dog dog = (Dog) obj;
return this.name.equals(dog.getName()) && this.color.equals(dog.getColor());
}
public String toString(){
return "【宠物信息:】名称:" + this.name + "、颜色:" + this.color;
}
}
public class JavaDemo{
public static void main(String args []){
ShopPet shop = new ShopPet();
shop.add(new Dog("黑狗","黑色"));
shop.add(new Cat("斑点猫","黑色"));
shop.add(new Cat("花猫","灰色"));
shop.add(new Dog("斑点狗","黑白色"));
Object result [] = shop.search("猫").toArray();
for(Object obj : result){
System.out.println(obj.toString());
}
}
}
宠物商店,使用链表完成,练习代码
1,有宠物标准;
2,宠物上点与链表的关系;
3,宠物标准与宠物商店的关系;
4,宠物的分类。