AttributeList类的实现

原创 2008年10月02日 15:36:00

 AttributeList类:

前面说到过Attribute类,而现在是AttributeList类,有什么关系呢。我的理解是:把Attribute看成是一个一维数组,而AttributeList就是一个二维数组。其中两个比较常用的方法是:1,get(int id)通过检索号获得Attribute;2,get(string name)通过name获得Attribute.

代码清单如下:

  1. package com.heaton.bot;
  2. /**
  3.  * The AttributeList class is used to store list of
  4.  * Attribute classes.
  5.  */
  6. import java.util.*;
  7. public class AttributeList extends Attribute implements Cloneable {
  8.   /**
  9.    * An internally used Vector.  This vector contains
  10.    * the entire(整个) list of attributes.
  11.    */
  12.   protected Vector vec;
  13.   /**
  14.    * Make an exact copy of this object using the cloneable interface.
  15.    *
  16.    * @return A new object that is a clone of the specified object.
  17.    */
  18.   public Object clone()
  19.   {
  20.     int i;
  21.     AttributeList rtn = new AttributeList();
  22.     for ( i=0;i<vec.size();i++ )
  23.       rtn.add( (Attribute)get(i).clone() );
  24.     return rtn;
  25.   }
  26.   /**
  27.    * Create a new, empty, AttributeList.
  28.    */
  29.   public AttributeList()
  30.   {
  31.     super("","");
  32.     vec = new Vector();
  33.   }
  34.   /**
  35.    * Locate an attribute by index number.  Index numbers
  36.    * start at zero.
  37.    *
  38.    * @param id A zero based index that specifies the attribute
  39.    * to retrieve(检索).
  40.    * @return The Attribute object that was found.
  41.    */
  42.   synchronized public Attribute get(int id)
  43.   {
  44.     if ( id<vec.size() )
  45.       return(Attribute)vec.elementAt(id);
  46.     else
  47.       return null;
  48.   }
  49.   /**
  50.    * Locate an attribute by its name.  The search is
  51.    * case-insensitive(不区分大小写).
  52.    *
  53.    * @param id The attribute name to search for.
  54.    * @return The Attribute object that was located.
  55.    */
  56.   synchronized public Attribute get(String id)
  57.   {
  58.     int i=0;
  59.     while ( get(i)!=null ) {
  60.       if ( get(i).getName().equalsIgnoreCase(id) )
  61.         return get(i);
  62.       i++;
  63.     }
  64.     return null;
  65.   }
  66.   /**
  67.    * Add the specified attribute to the list of attributes.
  68.    *
  69.    * @param a An attribute to add to this AttributeList.
  70.    */
  71.   synchronized public void add(Attribute a)
  72.   {
  73.     vec.addElement(a);
  74.   }
  75.   /**
  76.    * Clear all attributes from this AttributeList and return it
  77.    * to a empty state.
  78.    */
  79.   synchronized public void clear()
  80.   {
  81.     vec.removeAllElements();
  82.   }
  83.   /**
  84.    * Returns true of this AttributeList is empty, with no attributes.
  85.    *
  86.    * @return True if this AttributeList is empty, false otherwise.
  87.    */
  88.   synchronized public boolean isEmpty()
  89.   {
  90.     return( vec.size()<=0);
  91.   }
  92.   /**
  93.    * Returns the number of Attributes in this AttributeList.
  94.    *
  95.    * @return The number of Attributes in this AttributeList.
  96.    */
  97.   synchronized public int length()
  98.   {
  99.     return vec.size();
  100.   }
  101.   /**
  102.    * If there is already an attribute with the specified name,
  103.    * then it will have its value changed to match the specified value.
  104.    * If there is no Attribute with the specified name, then one will
  105.    * be created.  This method is case-insensitive.
  106.    *
  107.    * @param name The name of the Attribute to edit or create.  Case-insensitive.
  108.    * @param value The value to be held in this attribute.
  109.    */
  110.   synchronized public void set(String name,String value)
  111.   {
  112.     if ( name==null )
  113.       return;
  114.     if ( value==null )
  115.       value="";
  116.     Attribute a = get(name);
  117.     if ( a==null ) {
  118.       a = new Attribute(name,value);
  119.       add(a);
  120.     } else
  121.       a.setValue(value);
  122.   }
  123. }

OK!it's simple

C++笔试题 String类的实现

这个在面试或笔试的时候常问到或考到。 已知类String的原型为: class String { public:      String(const char *str = NULL);// 普通...
  • caoshangpa
  • caoshangpa
  • 2016年05月29日 09:12
  • 3859

Map集合及其实现类

Map 接口 ----|HashMap -------------extends Map ----|Hashtable -------------imp...
  • zhou920786312
  • zhou920786312
  • 2017年04月04日 14:49
  • 386

常用Map实现类对比

翻译人员: 铁锚 翻译时间: 2013年12月12日 原文链接: HashMap vs. TreeMap vs. Hashtable vs. LinkedHashMap Map 是最...
  • renfufei
  • renfufei
  • 2013年12月12日 19:40
  • 13239

关于set想说的(一)之Set的实现类及必要的方法

最近看到了《Thinking in Java》的第17章 容器深入探究,17.6 Set和存储顺序。自己写了写测试代码,加深下理解。主要设计toString()方法(主要是为了方便打印),equals...
  • fan2012huan
  • fan2012huan
  • 2016年03月23日 10:46
  • 1724

Java单例集合下set接口及其常用实现类

**这篇紧接着上一篇继续介绍Java单例集合下的接口及其实现类; 上一篇已经介绍完了Java单例集合下的List接口,现在简单介绍一下Java单例集合下的set接口及其常用实现类。七.Set集合接...
  • My_Obsession
  • My_Obsession
  • 2015年11月22日 20:59
  • 1207

java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析

java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异。 首先看一下List接口的的继承关系: list接口继承Col...
  • qq_30739519
  • qq_30739519
  • 2016年03月13日 12:49
  • 11119

[数据结构]栈之顺序栈的类模板实现

栈的数组实现形式,采用动态分配数组,不够时可以调整栈的大小。 Stack.h文件:主要定义栈的抽象基类,提供公共的接口函数。 #ifndef STACK #define STACK //栈...
  • u013467442
  • u013467442
  • 2015年06月20日 15:48
  • 1276

Java集合类Map与MapEntry学习

Map接口不是Collection接口的继承。Map接口用于维护键/值对(key/value pairs)。该接口描述了从不重复的键到值的映射。   (1) 添加、删除操作:   Object put...
  • u011514810
  • u011514810
  • 2016年04月22日 10:50
  • 1327

B00015 C++实现的图类

代码来自:GitHub - obscure76/graph: c++ graphs。 graph.h文件内容如下: #include #include #include #include #inclu...
  • tigerisland45
  • tigerisland45
  • 2016年06月21日 08:30
  • 1795

List接口及其实现类、Map接口及其实现类

List接口及其实现类: 特点:其元素以线性方式存储;           元素可重复;           元素有序;           可以对元素的位置精确控制; 实现类:ArrayList  ...
  • u012843873
  • u012843873
  • 2016年07月05日 10:12
  • 2228
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AttributeList类的实现
举报原因:
原因补充:

(最多只允许输入30个字)