golang中,封裝一個容納不同類型ArrayList類(源碼篇)

封裝一個像java中的ArrayList類:(切記:此類在多協程下使用不安全

package code
import "sync"
type Array interface {
Ini();
Add(interface{}) bool;
Contains(interface{}) int;
Size() int;
Get(int) interface{};
Remove(int) interface{};
RemoveO(interface{}) bool;
}
type ArrayList struct {
Data []interface{};
}
func (this *ArrayList)Ini() {
this.Data=make([]interface{},0);
}
func (this *ArrayList) Add (i interface{}) bool {
this.Data=append(this.Data, i);
return true;
}
//判斷是否保存對象 -1 表示沒有對象
func (this *ArrayList) Contains(i interface{}) int {
var r int =-1;
out:for k,v:=range this.Data {
if(v==i){
r=k;
break out;
}
}
return r;
}
func (this *ArrayList) Size() int {
return len(this.Data);
}
func (this *ArrayList) Get(index int) interface{} {
var r interface{}=nil;
if(index>=0 && index r=this.Data[index];
}
return r;
}
//索引刪除
func (this *ArrayList) Remove(index int) interface{} {
var r interface{}=nil;
if(index>=0 && index if(index==0) {
r=this.Data[index];
this.Data = this.Data[1:len(this.Data)]
}else if(index==(len(this.Data)-1)){
r=this.Data[index];
this.Data = this.Data[0:len(this.Data)-1]
}else {
r=this.Data[index];
this.Data=append(this.Data[0:index],this.Data[index+1:len(this.Data)]...);
}
}
return r;
}
//對象刪除
func (this *ArrayList) RemoveO(i interface{}) bool {
var r int=-1;
out:for k,v:=range this.Data {
if(v==i){
r=k;
break out;
}
}
if(r>=0) {
this.Remove(r);
return true;
}else {
return false;
}
}

注意:此類在多協程下不安全。(多協程安全Arraylist會在後面文章中分享)


分享到:


相關文章: