Commons Collections学习笔记(二)

本文介绍了一种使用装饰模式实现Bag和SortedBag接口的具体方法。通过继承抽象类并实现特定功能,如添加、移除元素及获取唯一元素集等操作。
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->publicabstractclassAbstractBagDecoratorextendsAbstractCollectionDecoratorimplementsBag{
protectedAbstractBagDecorator(){
super();
}
protectedAbstractBagDecorator(Bagbag){
super(bag);
}
protectedBaggetBag(){
return(Bag)getCollection();
}
publicintgetCount(Objectobject){
returngetBag().getCount(object);
}
publicbooleanadd(Objectobject,intcount){
returngetBag().add(object,count);
}
publicbooleanremove(Objectobject,intcount){
returngetBag().remove(object,count);
}
publicSetuniqueSet(){
returngetBag().uniqueSet();
}
}

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->publicabstractclassAbstractSortedBagDecoratorextendsAbstractBagDecoratorimplementsSortedBag
{
protectedAbstractSortedBagDecorator(){
super();
}
protectedAbstractSortedBagDecorator(SortedBagbag){
super(bag);
}
protectedSortedBaggetSortedBag(){
return(SortedBag)getCollection();
}
publicObjectfirst(){
returngetSortedBag().first();
}
publicObjectlast(){
returngetSortedBag().last();
}
publicComparatorcomparator(){
returngetSortedBag().comparator();
}
}

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->publicabstractclassAbstractMapBagimplementsBag
{

/**Themaptousetostorethedata*/
privatetransientMapmap;
/**Thecurrenttotalsizeofthebag*/
privateintsize;
/**Themodificationcountforfailfastiterators*/
privatetransientintmodCount;
/**Themodificationcountforfailfastiterators*/
privatetransientSetuniqueSet;

protectedAbstractMapBag(){
super();
}
protectedAbstractMapBag(Mapmap){
super();
this.map=map;
}
protectedMapgetMap(){
returnmap;
}
publicintsize(){
returnsize;
}
publicbooleanisEmpty(){
returnmap.isEmpty();
}
publicintgetCount(Objectobject){
MutableIntegercount
=(MutableInteger)map.get(object);
if(count!=null){
returncount.value;
}
return0;
}
publicbooleancontains(Objectobject){
returnmap.containsKey(object);
}
publicbooleancontainsAll(Collectioncoll){
if(collinstanceofBag){
returncontainsAll((Bag)coll);
}
returncontainsAll(newHashBag(coll));
}
booleancontainsAll(Bagother){
booleanresult=true;
Iteratorit
=other.uniqueSet().iterator();
while(it.hasNext()){
Objectcurrent
=it.next();
booleancontains=getCount(current)>=other.getCount(current);
result
=result&&contains;
}
returnresult;
}
publicIteratoriterator(){
returnnewBagIterator(this);
}
staticclassBagIteratorimplementsIterator
{
privateAbstractMapBagparent;
privateIteratorentryIterator;
privateMap.Entrycurrent;
privateintitemCount;
privatefinalintmods;
privatebooleancanRemove;
publicBagIterator(AbstractMapBagparent){
this.parent=parent;
this.entryIterator=parent.map.entrySet().iterator();
this.current=null;
this.mods=parent.modCount;
this.canRemove=false;
}
publicbooleanhasNext(){
return(itemCount>0||entryIterator.hasNext());
}
publicObjectnext(){
if(parent.modCount!=mods){
thrownewConcurrentModificationException();
}
if(itemCount==0){
current
=(Map.Entry)entryIterator.next();
itemCount
=((MutableInteger)current.getValue()).value;
}
canRemove
=true;
itemCount
--;
returncurrent.getKey();
}
publicvoidremove(){
if(parent.modCount!=mods){
thrownewConcurrentModificationException();
}
if(canRemove==false){
thrownewIllegalStateException();
}
MutableIntegermut
=(MutableInteger)current.getValue();
if(mut.value>1){
mut.value
--;
}
else{
entryIterator.remove();
}
parent.size
--;
canRemove
=false;
}
}
publicbooleanadd(Objectobject){
returnadd(object,1);
}
publicbooleanadd(Objectobject,intnCopies){
modCount
++;
if(nCopies>0){
MutableIntegermut
=(MutableInteger)map.get(object);
size
+=nCopies;
if(mut==null){
map.put(object,
newMutableInteger(nCopies));
returntrue;
}
else{
mut.value
+=nCopies;
returnfalse;
}
}
else{
returnfalse;
}
}
publicbooleanaddAll(Collectioncoll){
booleanchanged=false;
Iteratori
=coll.iterator();
while(i.hasNext()){
booleanadded=add(i.next());
changed
=changed||added;
}
returnchanged;
}
publicvoidclear(){
modCount
++;
map.clear();
size
=0;
}
publicbooleanremove(Objectobject){
MutableIntegermut
=(MutableInteger)map.get(object);
if(mut==null){
returnfalse;
}
modCount
++;
map.remove(object);
size
-=mut.value;
returntrue;
}
publicbooleanremove(Objectobject,intnCopies){
MutableIntegermut
=(MutableInteger)map.get(object);
if(mut==null){
returnfalse;
}
if(nCopies<=0){
returnfalse;
}
modCount
++;
if(nCopies<mut.value){
mut.value
-=nCopies;
size
-=nCopies;
}
else{
map.remove(object);
size
-=mut.value;
}
returntrue;
}
publicbooleanremoveAll(Collectioncoll){
booleanresult=false;
if(coll!=null){
Iteratori
=coll.iterator();
while(i.hasNext()){
booleanchanged=remove(i.next(),1);
result
=result||changed;
}
}
returnresult;
}
publicbooleanretainAll(Collectioncoll){
if(collinstanceofBag){
returnretainAll((Bag)coll);
}
returnretainAll(newHashBag(coll));
}
booleanretainAll(Bagother){
booleanresult=false;
Bagexcess
=newHashBag();
Iteratori
=uniqueSet().iterator();
while(i.hasNext()){
Objectcurrent
=i.next();
intmyCount=getCount(current);
intotherCount=other.getCount(current);
if(1<=otherCount&&otherCount<=myCount){
excess.add(current,myCount
-otherCount);
}
else{
excess.add(current,myCount);
}
}
if(!excess.isEmpty()){
result
=removeAll(excess);
}
returnresult;
}
protectedstaticclassMutableInteger
{
/**Thevalueofthismutable.*/
protectedintvalue;
MutableInteger(
intvalue){
this.value=value;
}
publicbooleanequals(Objectobj){
if(objinstanceofMutableInteger==false){
returnfalse;
}
return((MutableInteger)obj).value==value;
}
publicinthashCode(){
returnvalue;
}
}

publicObject[]toArray(){
Object[]result
=newObject[size()];
inti=0;
Iteratorit
=map.keySet().iterator();
while(it.hasNext()){
Objectcurrent
=it.next();
for(intindex=getCount(current);index>0;index--){
result[i
++]=current;
}
}
returnresult;
}
publicObject[]toArray(Object[]array){
intsize=size();
if(array.length<size){
array
=(Object[])Array.newInstance(array.getClass().getComponentType(),size);
}
inti=0;
Iteratorit
=map.keySet().iterator();
while(it.hasNext()){
Objectcurrent
=it.next();
for(intindex=getCount(current);index>0;index--){
array[i
++]=current;
}
}
if(array.length>size){
array[size]
=null;//截断多余的空位
}
returnarray;
}
publicSetuniqueSet(){
if(uniqueSet==null){
uniqueSet
=UnmodifiableSet.decorate(map.keySet());
}
returnuniqueSet;
}
protectedvoiddoWriteObject(ObjectOutputStreamout)throwsIOException{
out.writeInt(map.size());
for(Iteratorit=map.entrySet().iterator();it.hasNext();){
Map.Entryentry
=(Map.Entry)it.next();
out.writeObject(entry.getKey());
out.writeInt(((MutableInteger)entry.getValue()).value);
}
}
protectedvoiddoReadObject(Mapmap,ObjectInputStreamin)throwsIOException,ClassNotFoundException{
this.map=map;
intentrySize=in.readInt();
for(inti=0;i<entrySize;i++){
Objectobj
=in.readObject();
intcount=in.readInt();
map.put(obj,
newMutableInteger(count));
size
+=count;
}
}
publicbooleanequals(Objectobject){
if(object==this){
returntrue;
}
if(objectinstanceofBag==false){
returnfalse;
}
Bagother
=(Bag)object;
if(other.size()!=size()){
returnfalse;
}
for(Iteratorit=map.keySet().iterator();it.hasNext();){
Objectelement
=it.next();
if(other.getCount(element)!=getCount(element)){
returnfalse;
}
}
returntrue;
}
publicinthashCode(){
inttotal=0;
for(Iteratorit=map.entrySet().iterator();it.hasNext();){
Map.Entryentry
=(Map.Entry)it.next();
Objectelement
=entry.getKey();
MutableIntegercount
=(MutableInteger)entry.getValue();
total
+=(element==null?0:element.hashCode())^count.value;
}
returntotal;
}
publicStringtoString(){
if(size()==0){
return"[]";
}
StringBufferbuf
=newStringBuffer();
buf.append(
'[');
Iteratorit
=uniqueSet().iterator();
while(it.hasNext()){
Objectcurrent
=it.next();
intcount=getCount(current);
buf.append(count);
buf.append(
':');
buf.append(current);
if(it.hasNext()){
buf.append(
',');
}
}
buf.append(
']');
returnbuf.toString();
}

}

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->publicclassHashBagextendsAbstractMapBagimplementsBag,Serializable
{
privatestaticfinallongserialVersionUID=-6561115435802554013L;
publicHashBag(){
super(newHashMap());
}
publicHashBag(Collectioncoll){
this();
addAll(coll);
}
privatevoidwriteObject(ObjectOutputStreamout)throwsIOException{
out.defaultWriteObject();
super.doWriteObject(out);
}
privatevoidreadObject(ObjectInputStreamin)throwsIOException,ClassNotFoundException{
in.defaultReadObject();
super.doReadObject(newHashMap(),in);
}
}

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->publicclassTreeBagextendsAbstractMapBagimplementsSortedBag,Serializable
{
privatestaticfinallongserialVersionUID=-7740146511091606676L;
publicTreeBag(){
super(newTreeMap());
}
publicTreeBag(Comparatorcomparator){
super(newTreeMap(comparator));
}
publicTreeBag(Collectioncoll){
this();
addAll(coll);
}
publicObjectfirst(){
return((SortedMap)getMap()).firstKey();
}
publicObjectlast(){
return((SortedMap)getMap()).lastKey();
}
publicComparatorcomparator(){
return((SortedMap)getMap()).comparator();
}
privatevoidwriteObject(ObjectOutputStreamout)throwsIOException{
out.defaultWriteObject();
out.writeObject(comparator());
super.doWriteObject(out);
}
privatevoidreadObject(ObjectInputStreamin)throwsIOException,ClassNotFoundException{
in.defaultReadObject();
Comparatorcomp
=(Comparator)in.readObject();
super.doReadObject(newTreeMap(comp),in);
}
}

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->publicclassPredicatedBagextendsPredicatedCollectionimplementsBag
{
privatestaticfinallongserialVersionUID=-2575833140344736876L;
publicstaticBagdecorate(Bagbag,Predicatepredicate){
returnnewPredicatedBag(bag,predicate);
}
protectedPredicatedBag(Bagbag,Predicatepredicate){
super(bag,predicate);
}
protectedBaggetBag(){
return(Bag)getCollection();
}
publicbooleanadd(Objectobject,intcount){
validate(object);
returngetBag().add(object,count);
}
publicbooleanremove(Objectobject,intcount){
returngetBag().remove(object,count);
}
publicSetuniqueSet(){
returngetBag().uniqueSet();
}
publicintgetCount(Objectobject){
returngetBag().getCount(object);
}
}

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->publicclassPredicatedSortedBagextendsPredicatedBagimplementsSortedBag
{
privatestaticfinallongserialVersionUID=3448581314086406616L;
publicstaticSortedBagdecorate(SortedBagbag,Predicatepredicate){
returnnewPredicatedSortedBag(bag,predicate);
}
protectedPredicatedSortedBag(SortedBagbag,Predicatepredicate){
super(bag,predicate);
}
protectedSortedBaggetSortedBag(){
return(SortedBag)getCollection();
}
publicObjectfirst(){
returngetSortedBag().first();
}
publicObjectlast(){
returngetSortedBag().last();
}

publicComparatorcomparator(){
returngetSortedBag().comparator();
}
}

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
publicclassTypedBag
{
publicstaticBagdecorate(Bagbag,Classtype){
returnnewPredicatedBag(bag,InstanceofPredicate.getInstance(type));
}
protectedTypedBag(){
super();
}
}
publicclassTypedSortedBag
{
publicstaticSortedBagdecorate(SortedBagbag,Classtype){
returnnewPredicatedSortedBag(bag,InstanceofPredicate.getInstance(type));
}
protectedTypedSortedBag()
{
super();
}
}
基于径向基函数神经网络RBFNN的自适应滑模控制学习(Matlab代码实现)内容概要:本文介绍了基于径向基函数神经网络(RBFNN)的自适应滑模控制方法,并提供了相应的Matlab代码实现。该方法结合了RBF神经网络的非线性逼近能力和滑模控制的强鲁棒性,用于解决复杂系统的控制问题,尤其适用于存在不确定性和外部干扰的动态系统。文中详细阐述了控制算法的设计思路、RBFNN的结构与权重更新机制、滑模面的构建以及自适应律的推导过程,并通过Matlab仿真验证了所提方法的有效性和稳定性。此外,文档还列举了大量相关的科研方向和技术应用,涵盖智能优化算法、机器学习、电力系统、路径规划等多个领域,展示了该技术的广泛应用前景。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的研究生、科研人员及工程技术人员,特别是从事智能控制、非线性系统控制及相关领域的研究人员; 使用场景及目标:①学习和掌握RBF神经网络与滑模控制相结合的自适应控制策略设计方法;②应用于电机控制、机器人轨迹跟踪、电力电子系统等存在模型不确定性或外界扰动的实际控制系统中,提升控制精度与鲁棒性; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,深入理解算法实现细节,同时可参考文中提及的相关技术方向拓展研究思路,注重理论分析与仿真验证相结合。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值