该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
2019-08-25
链表学习续
实现数据内容查询功能
interface ILink{//创建一个接口用于定义方法标准
//定义增加方法
public void add(E e) ;
//定义获取元素个数方法
public int getLength();
//判断是否为空集合
public boolean isEmpty();
//定义返回链表数据方法(返回数据为数组形式,为了通用性类型设置为Object)
public Object [] toArray() ;
//定义根据索引索取数据
public E get(int index) ;
//定义修改数据方法
public void set(int index, E data) ;
//定义数据内容查询功能
public boolean contains(E data) ;
}
class LinkImpl implements ILink{//创建一个子类继承ILink接口
private Node root ;
@Override
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 ++ ;
}
private int count ;
@Override
public int getLength(){
return this.count ;
}
@Override
public boolean isEmpty(){
if (this.count == 0){
return true ;
}else{
return false ;
}
}
private int foot ;
private Object [] returnData ;
@Override
public Object [] toArray(){
if(this.isEmpty()){
throw new NullPointerException("空集合");
}
this.foot = 0 ;
this.returnData = new Object [this.count] ;
this.root.toArrayNode();
return this.returnData ;
}
@Override
public E get(int index){
if(index >= this.count){
throw new ArrayIndexOutOfBoundsException("指定索引不在范围之内");
}else{
this.foot = 0 ;
return this.root.getNode(index) ;
}
}
@Override
public void set(int index, E data){
if(index >= this.count){
throw new ArrayIndexOutOfBoundsException("指定索引不在范围之内");
}else{
this.foot = 0 ;
this.root.setNode(index,data) ;
}
}
@Override
public boolean contains(E data){
if(data == null){
return false ;
}else{
return this.root.containsNode(data) ;
}
}
//-------------------以上为接口子类,以下为内部类---------------------------
private class Node{//创建内部类用于实现引用关系的处理
private E data ;//用于节点保存数据
private Node next ;//用于节点的引用关系
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(){
LinkImpl.this.returnData[LinkImpl.this.foot ++] = this.data ;
if(this.next != null){
this.next.toArrayNode() ;
}
}
public E getNode(int index){
if(LinkImpl.this.foot ++ == index){
return this.data ;
}else{
return this.next.getNode(index) ;
}
}
public void setNode(int index, E data){
if(LinkImpl.this.foot ++ == index){
this.data = data ;
}else{
this.next.setNode(index,data) ;
}
}
public boolean containsNode(E data){
if(this.data.equals(data)){
return true ;
}else{
if(this.next == null){
return false ;
}else{
return this.next.containsNode(data) ;
}
}
}
}
}
public class LinkDemo{
public static void main(String args[]){
ILink link = new LinkImpl () ;
link.add("Hello");
link.add("World");
link.add("Allan");
link.add("Tom");
System.out.println(link.getLength()) ;
System.out.println(link.isEmpty()) ;
link.set(2,"你好!!!") ;
System.out.println(link.get(2));
System.out.println(link.contains("你好!!!"));
System.out.println(link.contains("2212"));
}
}
实现删除链表数据功能
interface ILink{//创建一个接口用于定义方法标准
//定义增加方法
public void add(E e) ;
//定义获取元素个数方法
public int getLength();
//判断是否为空集合
public boolean isEmpty();
//定义返回链表数据方法(返回数据为数组形式,为了通用性类型设置为Object)
public Object [] toArray() ;
//定义根据索引索取数据
public E get(int index) ;
//定义修改数据方法
public void set(int index, E data) ;
//定义数据内容查询功能
public boolean contains(E data) ;
//定义删除数据功能
public void remove(E e) ;
}
class LinkImpl implements ILink{//创建一个子类继承ILink接口
private Node root ;
@Override
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 ++ ;
}
private int count ;
@Override
public int getLength(){
return this.count ;
}
@Override
public boolean isEmpty(){
if (this.count == 0){
return true ;
}else{
return false ;
}
}
private int foot ;
private Object [] returnData ;
@Override
public Object [] toArray(){
if(this.isEmpty()){
throw new NullPointerException("空集合");
}
this.foot = 0 ;
this.returnData = new Object [this.count] ;
this.root.toArrayNode();
return this.returnData ;
}
@Override
public E get(int index){
if(index >= this.count){
throw new ArrayIndexOutOfBoundsException("指定索引不在范围之内");
}else{
this.foot = 0 ;
return this.root.getNode(index) ;
}
}
@Override
public void set(int index, E data){
if(index >= this.count){
throw new ArrayIndexOutOfBoundsException("指定索引不在范围之内");
}else{
this.foot = 0 ;
this.root.setNode(index,data) ;
}
}
@Override
public boolean contains(E data){
if(data == null){
return false ;
}else{
return this.root.containsNode(data) ;
}
}
@Override
public void remove(E data){
if(this.contains(data)){
if(this.root.data.equals(data)){
this.root = this.root.next ;
}else{
this.root.next.removeNode(this.root, data) ;
}
this.count -- ;
}
}
//-------------------以上为接口子类,以下为内部类---------------------------
private class Node{//创建内部类用于实现引用关系的处理
private E data ;//用于节点保存数据
private Node next ;//用于节点的引用关系
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(){
LinkImpl.this.returnData[LinkImpl.this.foot ++] = this.data ;
if(this.next != null){
this.next.toArrayNode() ;
}
}
public E getNode(int index){
if(LinkImpl.this.foot ++ == index){
return this.data ;
}else{
return this.next.getNode(index) ;
}
}
public void setNode(int index, E data){
if(LinkImpl.this.foot ++ == index){
this.data = data ;
}else{
this.next.setNode(index,data) ;
}
}
public boolean containsNode(E data){
if(this.data.equals(data)){
return true ;
}else{
if(this.next == null){
return false ;
}else{
return this.next.containsNode(data) ;
}
}
}
public void removeNode(Node previous, E data){
if(this.data.equals(data)){
previous.next = this.next ;
}else{
if(this.next != null){
this.next.removeNode(this, data) ;
}
}
}
}
}
public class LinkDemo{
public static void main(String args[]){
ILink link = new LinkImpl () ;
link.add("Hello");
link.add("World");
link.add("Allan");
link.add("Tom");
System.out.println(link.getLength()) ;
System.out.println(link.isEmpty()) ;
link.remove("Tom") ;
Object [] results = link.toArray() ;
for(Object obj : results){
System.out.println(obj) ;
}
link.set(2,"你好!!!") ;
System.out.println(link.get(2));
System.out.println(link.contains("你好!!!"));
System.out.println(link.contains("2212"));
}
}