Containers in dynamically typed languages are relatively easy, since values know their own type. Containers simply hold values of type Object. Since any value can be made an Object, containers are very general.
For this reason, dynamically typed languages such as Lisp or Smalltalk or Java have for many years come with a rich collection of container abstractions already written as part of the language.
Containers in strongly typed languages are much more difficult, and will be the topic for the remainder of this chapter.