• javascrip函数库:SortedList.js


    /**
    * Binary Search List
    */
    function testSortedList(){
     alert("SortedList test begin:");
     try{
      var list=new ArrayList();
      var s=new SortedList();
      s.add(new JavaString("WSG"));
      assert(s.size()==1);
      assert(s.indexOf(new JavaString("WSG"))==0);

      list.add(new JavaString("HELLO"));
      list.add(new JavaString("TOM"));
      list.add(new JavaString("BUSH"));
      s.add(new JavaString("SINA"));
      s.add(new JavaString("163"));
      s.add(new JavaString("CSDN"));
      s.addAll(list);
      assert(s.size()==7);
      assert(s.indexOf(new JavaString("SINA"))==4);
      assert(s.indexOf(new JavaString("SSN"))==5);
      assert(s.indexOf(new JavaString("SA"))==4);
      //var s2=s.subList(4,7);
      for(var i=0;i<s.size();i++){
       alert(s.get(i));
      }
     }
     catch(e){
      alert(e);
     }
     alert("SortedList test end");
    }


    function SortedList(){
       private:
       this.buffer =new Array();
       var args=SortedList.arguments;
       if(args.length>0) this.buffer=args[0];
       this.length=this.buffer.length;
       com=null;
     
       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.setComparator=setComparator;
       function setComparator(comp){
         if(this.length!=0) throw "Only can be set when list is empty";
      this.com=comp;
       }
       this.getComparator=getComparator;
       function getComparator(){
      return this.com;
       }

       this.hashCode=hashCode;
       function hashCode(){
      var h=0;
      for(var i=0;i<this.length;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--;
       return true;
      }
      else return false;
     }
     
     this.add=add;
     function add(obj){
     
      var index = this.indexOf(obj);
      for(var i=this.length;i>index;){
       this.buffer[i]=this.buffer[--i];
      }

      this.buffer[index]=obj;
      this.length++;

     }

     this.indexOf=indexOf;
     function indexOf(obj){
     
      if(this.length==0) return 0;
     
      var min=0,max=this.length-1;
      var mid=0;
     
      while(min<=max){
      
       mid = (min+max) >> 1;
       var c=0;
       if(this.com==null) c=obj.compareTo(this.buffer[mid]);
       else c=this.com.compare(obj,this.buffer[mid]);
       
       if(c==0){
        return mid;
       }
       else if(c<0){
        max=mid-1;
       }
       else{
        min=mid+1;
       }
      }
      mid =(min+max) >>1;
      return mid+1;
     }

     this.contains=contains;
     function contains(obj){
      if(this.length==0) return false;
      var min=0,max=this.length-1;
      var mid=0;
      while(min<=max){
       mid = (min+max) >> 1;
       var c=0;
       if(this.com==null) c=obj.compareTo(this.buffer[mid]);
       else  c=this.com.compare(obj,this.buffer[mid]);
       if(c==0){
        return true;
       }
       else if(c<0){
        max=mid-1;
       }
       else{
        min=mid+1;
       }
      }
      return false;
     }

     this.equals=equals;
     function equals(obj){
      if(this.size()!=obj.size()) return false;
      for(var i=0;i<this.length;i++){
       if(!obj.get(i).equals(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.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 SortedList(newbuffer);
     }
     

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

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

  • 相关阅读:
    如何使界面在较大的屏幕上居中,并且在设计期可以按期望的界面尺寸进行设计?
    Embedding programmatic skins in CSS and compiling to SWF
    将应用程序11M内存占用,降至500K左右
    [转载]FCKeditor添加自定义按钮
    fieldset标签的使用
    转贴
    面向对象的好处
    61条面向对象设计的经验原则
    用 Git 操作的数据库?这个项目火了!
    千万别强制停机!我嘴都气歪了!
  • 原文地址:https://www.cnblogs.com/asyuras/p/168829.html
Copyright © 2020-2023  润新知