/** 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); } }

|