zoukankan      html  css  js  c++  java
  • javascript函数库:ArrayList.js

    /**
    use as ArrayList for java programmer
    */
    function testArrayList(){
     
     alert("ArrayList test begin:");
     try{
      var list=new ArrayList();
      assert(list.isEmpty());
      assert(list.size()==0);

      list.add(new Integer(100));
      list.add(new Integer(200));
      list.add(new Integer(33));

      assert(!list.isEmpty());
      assert(list.size()==3);
     
      var list2=new ArrayList();
      list2.add(new Integer(32));
      list2.addAll(list);
      assert(list2.size()==4);
      list2.add(new Integer(200));
     
     
     
      assert(list2.indexOf(new Integer(200))==2);
      assert(list2.lastIndexOf(new Integer(200))==4);
     
     
      assert(list2.contains(new Integer(200)));
     
      list2.removeAll(list);
      assert(list2.size()==2);
      assert(list2.contains(new Integer(200)));
     
      assert(list2.get(0).equals(new Integer(32)));
     
      list2.addAll(list);
      list2.retainAll(list);
      assert(list2.size()==4);
      assert(list2.get(0).intValue()==200);
      assert(list2.get(1).intValue()==100);
      assert(list2.get(2).intValue()==200);
      assert(list2.get(3).intValue()==33);

      assert(!list.equals(list2));
      list2.remove(0);
      assert(list.equals(list2));
      list2.set(0,new Integer(200));
      assert(!list.equals(list2));
      list2.set(1,new Integer(100));
      assert(list.equals(list2));

      assert(list.containsAll(list2));
      list2.clear();
      assert(list2.isEmpty());
      assert(list2.size()==0);
      assert(list.containsAll(list2));
     
      assert(!list2.iterator().hasNext());
      var it=list.iterator();
      assert(it.hasNext());
      it.next();
      assert(it.hasNext());
      it.next();
      assert(it.hasNext());
      it.next();
      assert(!it.hasNext());

     }
     catch(e){
      alert(e);
     }
      
     alert("ArrayList test end");
    }

    function ArrayList(){
     private:
     this.buffer=new Array();
     var args=ArrayList.arguments;
     if(args.length>0) this.buffer=args[0];
     this.length=this.buffer.length;


     function ListIterator(table,len){

            this.table=table;
      this.len=len;                         
            this.index=0;
     
      this.hasNext=hasNext;
      function hasNext() {
       return this.index< this.len;
            }

            this.next=next;
      function next() {
       if(!this.hasNext())
        throw "No such Element!";
          return this.table[this.index++];
            }
        }
     
     public:
     this.hashCode=hashCode;
     function hashCode(){
      var h=0;
      for(var i=0;i<this.lengh;i++)
       h+=this.buffer[i].hashCode();
      return h;
     }
     
     this.size=size;
     function size(){
      return this.length;
     }

     
     this.clear=clear;
     function clear(){
      this.length=0;
     }

     
     this.isEmpty=isEmpty;
     function isEmpty(){
      return this.length==0;
     }
     
     
     this.toArray=toArray;
     function toArray(){
      var copy=new Array();
      for(var i=0;i<this.length;i++){
       copy[i]=this.buffer[i];
      }
      return copy;
     }

     this.get=get;
     function get(index){
      if(index>=0 && index<this.length)
       return this.buffer[index];
      return null;
     }

     
     this.remove=remove;
     function remove(param){
      var index=0;
     
      if(isNaN(param)){
       index=this.indexOf(param);
      }
      else index=param;
     
     
      if(index>=0 && index<this.length){
       for(var i=index;i<this.length-1;i++)
        this.buffer[i]=this.buffer[i+1];
       this.length-=1;
       return true;
      }
      else return false;
     }
     
     this.add=add;
     function add(){
      var args=add.arguments;
      if(args.length==1){
       this.buffer[this.length++]=args[0];
       return true;
      }
      else if(args.length==2){
       var index=args[0];
       var obj=args[1];
       if(index>=0 && index<=this.length){
        for(var i=this.length;i>index;i--)
         this.buffer[i]=this.buffer[i-1];
         this.buffer[i]=obj;
        this.length+=1;
        return true;
       }
      }
      return false;
     }

     this.indexOf=indexOf;
     function indexOf(obj){
      for(var i=0;i<this.length;i++){
       if(this.buffer[i].equals(obj)) return i;
      }
      return -1;
     }

     
     this.lastIndexOf=lastIndexOf;
     function lastIndexOf(obj){
      for(var i=this.length-1;i>=0;i--){
       if(this.buffer[i].equals(obj)) return i;
      }
      return -1;
     }

     this.contains=contains;
     function contains(obj){
      return this.indexOf(obj)!=-1;
     }

     this.equals=equals;
     function equals(obj){
      if(this.size()!=obj.size()) return false;
      for(var i=0;i<this.length;i++){
       if(!obj.contains(this.buffer[i])) return false;
      }
      return true;
     }


     this.addAll=addAll;
     function addAll(list){
      var mod=false;
      for(var it=list.iterator();it.hasNext();){
       var v=it.next();
       if(this.add(v)) mod=true;
      }
      return mod; 
     }
     
     this.containsAll=containsAll;
     function containsAll(list){
      for(var i=0;i<list.size();i++){
       if(!this.contains(list.get(i))) return false;
      }
      return true;
     }

     this.removeAll=removeAll;
     function removeAll(list){
      for(var i=0;i<list.size();i++){
       this.remove(this.indexOf(list.get(i)));
      }
     }
     
     
     this.retainAll=retainAll;
     function retainAll(list){
      for(var i=this.length-1;i>=0;i--){
       if(!list.contains(this.buffer[i])){
        this.remove(i);
       }
      }
     }

     this.subList=subList;
     function subList(begin,end){
      if(begin<0) begin=0;
      if(end>this.length) end=this.length;
      var newsize=end-begin;
      var newbuffer=new Array();
      for(var i=0;i<newsize;i++){
       newbuffer[i]=this.buffer[begin+i];
      }
      return new ArrayList(newbuffer);
     }
     
     this.set=set;
     function set(index,obj){
      if(index>=0 && index<this.length){
       temp=this.buffer[index];
       this.buffer[index]=obj;
       return temp;
      }
     }

     this.iterator=iterator;
     function iterator(){
      return new ListIterator(this.buffer,this.length);
     }
     
    }

    转自:http://blog.csdn.net/treeroot/

  • 相关阅读:
    BZOJ.1468.Tree(点分治)
    BZOJ.1935.[SHOI2007]Tree园丁的烦恼(CDQ分治 三维偏序)
    BZOJ.4319.[cerc2008]Suffix reconstruction(后缀数组 构造 贪心)
    BZOJ.3262.陌上花开([模板]CDQ分治 三维偏序)
    洛谷.3374.[模板]树状数组1(CDQ分治)
    BZOJ.4566.[HAOI2016]找相同字符(后缀数组 单调栈)
    POJ.3145.Common Substrings(后缀数组 倍增 单调栈)
    POJ.2774.Long Long Message/SPOJ.1811.LCS(后缀数组 倍增)
    POJ.1743.Musical Theme(后缀数组 倍增 二分 / 后缀自动机)
    UOJ.35.[模板]后缀排序(后缀数组 倍增)
  • 原文地址:https://www.cnblogs.com/asyuras/p/168831.html
Copyright © 2011-2022 走看看