zoukankan      html  css  js  c++  java
  • (Java)单链表Java语言顺序结构实现(数据结构三)

    1.迭代器接口实现

    package com.zhaochao;
    
    public interface Iterator<E> {
    	 boolean  hasNext();
    	 E        next();
    	 boolean  delete();
    	 boolean  modify(E e);
    	 int      index();
    }
    

    2.List接口实现

    package com.zhaochao;
    
    
    
    
    
    public interface List<E> {
    	
        //链表大小
    	int size();
    	
    	//链表是否为空	
    	boolean isEmpty();
    	
    	boolean contains(Object o);
    
        Iterator<E> iterator();
    
        Object[] toArray();
    
        <T> T[] toArray(T[] a);
    
        boolean add(E e);
    
        boolean remove(Object o);
    
        boolean containsAll(List<?> c);
     
        boolean addAll(List<? extends E> c);
    
        boolean addAll(int index, List<? extends E> c);
    
        boolean removeAll(List<?> c);
    
        boolean retainAll(List<?> c);
    
        void clear();
    
        boolean equals(Object o);
    
        int hashCode();
    
        E get(int index);
    
        E set(int index, E element);
    
        void add(int index, E element) ;
    
        E remove(int index);
    
        int indexOf(E o);
    
        int lastIndexOf(E o);
    
        List<E> subList(int fromIndex, int toIndex);
    
    }
    
    3.异常类实现

    package com.zhaochao;
    
    public class IndexOutOfBoundsException extends RuntimeException {
    	 private static final long serialVersionUID = 234122996006267687L;
    
    	    /**
    	     * Constructs an <code>IndexOutOfBoundsException</code> with no
    	     * detail message.
    	     */
    	    public IndexOutOfBoundsException() {
    	        super();
    	    }
    
    	    /**
    	     * Constructs an <code>IndexOutOfBoundsException</code> with the
    	     * specified detail message.
    	     *
    	     * @param   s   the detail message.
    	     */
    	    public IndexOutOfBoundsException(String s) {
    	        super(s);
    	    }
    }
    
    
    4.顺序结构单链表实现

    package com.zhaochao;
    
    import java.util.Arrays;
    
    
    public class LinearList<E> implements List<E> {
    
    	final static int INITIAL_CAPACITY=100;
    	
    	final static int INCREMENT_SIZE=10;
    	
    	transient Object [] item;
    	
    	transient int capacity=0;
    	
    	transient int length=0;
    	
    	LinearList(){
    			this.item=new Object[INITIAL_CAPACITY];
    			this.capacity=INITIAL_CAPACITY;
    	}
    	LinearList(List<E>list){
    		this.length=list.size();
    		this.capacity=this.length;
    		this.item=list.toArray();
    	}
    	
    	@Override
    	public int size() {
    		// TODO Auto-generated method stub
    		return this.length;
    	}
    
    	@Override
    	public boolean isEmpty() {
    		// TODO Auto-generated method stub
    		return this.length==0;
    	}
    
    	
    	@Override
    	public boolean contains(Object o) {
    		// TODO Auto-generated method stub
    		return indexOf(o)!=-1;
    	}
    
    	@Override
    	public Iterator<E> iterator() {
    		// TODO Auto-generated method stub
    		return new LinearIterator();
    	}
    	private class LinearIterator implements Iterator<E>{
    		private int nowIndex;
    		
    		public LinearIterator() {
    			// TODO Auto-generated constructor stub
    			this.nowIndex=0;
    		}
    		@Override
    		public boolean hasNext() {
    			// TODO Auto-generated method stub
    			return this.nowIndex<length;
    		}
    
    		@Override
    		public E next() {
    			// TODO Auto-generated method stub
    			E e=(E) item[nowIndex];
    			nowIndex++;
    			return e;
    		}
    
    		@Override
    		public boolean delete() {
    			// TODO Auto-generated method stub
    			remove(nowIndex);
    			return true;
    		}
    
    		@Override
    		public boolean modify(E e) {
    			// TODO Auto-generated method stub
    			item[nowIndex]=e;
    			return true;
    		}
    
    		@Override
    		public int index() {
    			// TODO Auto-generated method stub
    			return nowIndex;
    		}
    	}
    	
    
    	@Override
    	public Object[] toArray() {
    		// TODO Auto-generated method stub
    		Object []obj=new Object[length];
    		for(int i=0;i<length;i++)
    			obj[i]=item[i];
    		return obj;
    	}
    
    	@Override
    	public <T> T[] toArray(T[] a) {
    		// TODO Auto-generated method stub
    	     if (a.length < length)
    	            // Make a new array of a's runtime type, but my contents:
    	            return (T[]) Arrays.copyOf(item, length, a.getClass());
    	        System.arraycopy(item, 0, a, 0, length);
    	        if (a.length > length)
    	            a[length] = null;
    	        return a;
    	}
    
    	@Override
    	public boolean add(E e) {
    		// TODO Auto-generated method stub
    		addLast(e);
    		return true;
    	}
    
    	@Override
    	public boolean remove(Object o) {
    		// TODO Auto-generated method stub
    		while(contains(o)){
    			remove(contains(o));
    		}
    		return true;
    	}
    
    	@Override
    	public boolean containsAll(List<?> c) {
    		// TODO Auto-generated method stub
    		boolean flag=true;
    		Iterator it=c.iterator();
    		while(it.hasNext()){
    			flag=flag&&contains(it.next());
    		}
    		return flag;
    	}
    
    	@Override
    	public boolean addAll(List<? extends E> c) {
    		// TODO Auto-generated method stub
    		Iterator it=c.iterator();
    		while(it.hasNext()){
    			add((E)it.next());
    		}
    		return true;
    	}
    
    	@Override
    	public boolean addAll(int index, List<? extends E> c) {
    		// TODO Auto-generated method stub
    		Iterator it=c.iterator();
    		while(it.hasNext()){
    			add(index++,(E)it.next());
    		}
    		return true;
    	}
    
    	@Override
    	public boolean removeAll(List<?> c) {
    		// TODO Auto-generated method stub
    		Iterator it=c.iterator();
    		while(it.hasNext()){
    			if(contains(it.next()))
    				remove(it.next());
    		}
    		return true;
    	}
    
    	@Override
    	public boolean retainAll(List<?> c) {
    		// TODO Auto-generated method stub
    		Iterator it=this.iterator();
    		while(it.hasNext()){
    			E e=(E) it.next();
    			if(!c.contains(e))
    				remove(e);
    		}
    		return true;
    	}
    
    	@Override
    	public void clear() {
    		// TODO Auto-generated method stub
    		this.item=new Object[INITIAL_CAPACITY];
    		this.capacity=INITIAL_CAPACITY;
    	}
    
    	@Override
    	public E get(int index) {
    		// TODO Auto-generated method stub
    		checkIndex(index);
    		return (E) item[index];
    	}
    
    	@Override
    	public E set(int index, E element) {
    		// TODO Auto-generated method stub
    		checkIndex(index);
    		item[index]=element;
    		return element;
    	}
    
    	@Override
    	public void add(int index, E element) {
    		// TODO Auto-generated method stub
    		checkIndex(index);
    		checkCapacity();
    	    System.arraycopy(item, index, item, index+1,length-index);
    		item[index]=element;
    		length++;
    	}
    	
    
    	@Override
    	public E remove(int index) {
    		// TODO Auto-generated method stub
    		checkRomoveIndex(index);
    		E e=(E) item[index];
    		System.arraycopy(item, index+1, item, index,length-index-1);
    		length--;
    		return e;
    	}
    
    	@Override
    	public int indexOf(Object o) {
    		// TODO Auto-generated method stub
    		E e=(E)o;
    		int index=-1;
    		if(o!=null){
    			for(int i=0;i<length;i++){
    				if(item[i].equals(e))
    					index=i;
    			}
    				
    		}else{
    			for(int i=0;i<length;i++){
    				if(item[i]==null)
    					index=i;
    			}
    		}
    		return index;
    	}
    
    	@Override
    	public int lastIndexOf(Object o) {
    		// TODO Auto-generated method stub
    		E e=(E)o;
    		int index=-1;
    		if(o!=null){
    			for(int i=length-1;i>0;--i){
    				if(item[i].equals(e))
    					index=i;
    			}
    				
    		}else{
    			for(int i=length-1;i>0;--i){
    				if(item[i]==null)
    					index=i;
    			}
    		}
    		return index;
    	}
    
    	@Override
    	public List<E> subList(int fromIndex, int toIndex) {
    		// TODO Auto-generated method stub
    		checkRomoveIndex(fromIndex);
    		checkRomoveIndex(toIndex);
    		List<E> ll=new LinearList<E>();
    		for(int i=fromIndex;i<=toIndex;i++)
    			ll.add(get(i));
    		return ll;
    	}
    	
    	private void addLast(E e){
    		checkCapacity();
    		item[length]=e;
    		length++;
    	}
    	private void checkCapacity(){
    		if(length>=capacity){
    			Object []obj=new Object[capacity+INCREMENT_SIZE];
    			obj=Arrays.copyOfRange(item,0, length-1);
    			item=obj;
    			capacity+=INCREMENT_SIZE;
    		}
    	}
    	private void checkRomoveIndex(int index){
    		if(index<0||index>=length){
    			throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
    		}
    	}
    	private void checkIndex(int index)  {
    		if(index<0||index>length){
    			throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
    		}
    	}
    	private String outOfBoundsMsg(int index){
    		return "index:"+index+" length:"+length;
    	}
    
    
    }
    

    5.测试

    package com.zhaochao;
    
    
    public class main {
    
    
    	public static void main(String[] args) throws Exception {
    		// TODO Auto-generated method stub
    		List<Test> ls=new LinearList<Test>();
    		Test t=new Test();
    		for(int i=0;i<10;i++)
    			ls.add(t);
    		Iterator it=ls.iterator();
    		while(it.hasNext()){
    			System.out.println(it.next());
    		}
    	
    	}
    
    }
    
    
    class Test{
    	public static int a=0;
    	public String toString(){
    		return String.valueOf(a++);
    	}
    }

    6.测试结果

    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    



  • 相关阅读:
    JAVA for(i = 0; i<a.length; i++) 解析
    3.2.2多维数组 3.3 排序
    3.2数组
    字符串和数组
    2.7.3与程序转移有关的跳转语句
    2.7.2 循环语句
    读书共享 Primer Plus C-part 4
    Linux 批量修改文件名
    关于/usr/local/lib/libz.a(zutil.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC解决办法
    做一个有深度的程序猿
  • 原文地址:https://www.cnblogs.com/whzhaochao/p/5023515.html
Copyright © 2011-2022 走看看