Hashtables are an efficient and general mechanism for maintaining associations such as the association between an object and its name. Although hashtables are usually the best way to maintain associations, efficiency and style considerations sometimes favor the use of an association list (a-list).
assoc is fairly fast when the test argument is
eql and there are only a few elements, but the time goes up
in proportion with the number of elements. In contrast, the
hash-table lookup has a somewhat higher overhead, but the speed is
largely unaffected by the number of entries in the table. For an
equal hash-table or alist, hash-tables have an even greater
advantage, since the test is more expensive. Whatever you do, be sure
to use the most restrictive test function possible.
The style argument observes that although hash-tables and alists overlap in function, they do not do all things equally well.
setf. With an alist, one has to go through contortions, either
rplacd’ing the cons if the entry exists, or pushing a new one if it doesn’t. The side-effecting nature of hash-table operations is an advantage here.
Historically, symbol property lists were often used for global name associations. Property lists provide an awkward and error-prone combination of name association and record structure. If you must use the property list, please store all the related values in a single structure under a single property, rather than using many properties. This makes access more efficient, and also adds a modicum of typing and abstraction. See advanced-type-stuff for information on types in CMUCL.