七叶笔记 » golang编程 » golang中,封装一个容纳不同类型ArrayList类(源码篇)

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<len(this.Data)){
 r=this.Data[index];
 }
 return r;
}
// 索引 删除
func (this *ArrayList) Remove(index int) interface{} {
 var r interface{}=nil;
 if(index>=0 && index<len(this.Data)){
 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会在后面文章中分享)

相关文章