zoukankan      html  css  js  c++  java
  • 面试题目——《CC150》Java

    package cc150.java;
    
    import java.util.Iterator;
    
    public class CircularArray {
    
    	public static void main(String[] args) {		//实现一个类似数组的数据结构,可以进行高效的旋转
    		// TODO 自动生成的方法存根
    		CircularArray ca_out = new CircularArray();
    		circularArray<Integer> ca = ca_out.new circularArray<Integer>(5);
    		ca.set(0, 0);
    		ca.set(1, 1);
    		ca.set(2, 2);
    		ca.set(3, 3);
    		ca.set(4, 4);
    		ca.rotate(5);		//数组向右移位,也就是数组的head改变,到末尾之后会返回前
    		System.out.println(ca.get(4));
    		
    	}
    	
    	public class circularArray<T> implements Iterable<T>{	//环形数组
    		private T[] items;		//无法创建泛型的数组,所以必须将数组转型为List<T>或者将items定义为List<T>
    		private int head=0;	//指向数组开头的元素
    		
    		public circularArray(int size){	//构造函数
    			items = (T[]) new Object[size];
    		}
    		
    		private int convert(int index){		//转换正确的数组下标,index加上当前head
    			if(index < 0)												//负数都会是0
    				index += items.length;
    			return (head+index) % items.length;
    		}
    		
    		public void rotate(int shiftRight){		//轮换,改变数组的head下标
    			head = convert(shiftRight);
    		}
    		
    		public T get(int i){			//取得数组中某个下标的元素
    			if(i<0 || i>=items.length)
    				throw new java.lang.IndexOutOfBoundsException("...");
    			return items[convert(i)];
    		}
    		
    		public void set(int i,T item){		//赋值
    			items[convert(i)] = item;
    		}
    
    		//实现迭代器接口
    		@Override
    		public Iterator<T> iterator() {
    			// TODO 自动生成的方法存根
    			return new circularArrayIterator<T>(this);
    		}
    		
    		private class circularArrayIterator<TI> implements Iterator<TI>{
    			private int _current = -1;
    			private TI[] _items;
    			
    			public circularArrayIterator(circularArray<TI> array){	//传递的是circularArray<TI>本身
    				_items = array.items;									//_items和item相等
    			}
    
    			@Override
    			public boolean hasNext() {
    				// TODO 自动生成的方法存根
    				return _current < items.length-1;
    			}
    
    			@Override
    			public TI next() {
    				// TODO 自动生成的方法存根
    				_current++;
    				TI item = (TI) _items[convert(_current)];
    				return item;
    			}
    			
    			@Override
    			public void remove(){
    				throw new UnsupportedOperationException("...");
    			}
    		}
    		
    	}
    
    }
    
  • 相关阅读:
    Java: Regular Expressions
    Java: Checked & Unchecked Exceptions
    二叉树的构建和层级打印
    [leetcode] 1032: Stream of Characters: Tries&AC自动机
    [leetcode] 1503: Previous Permutation With One Swap
    robot moving on the surface of a square
    killing rabbits
    Find the longest route with the smallest starting point
    [leetcode] Minimum Number of K Consecutive Bit Flips
    检测设备横屏 || 竖屏的状态
  • 原文地址:https://www.cnblogs.com/tonglin0325/p/5925103.html
Copyright © 2011-2022 走看看