Chapter 5. Collection types
It’s better to have 100 functions operate on one data structure than 10 functions on 10 data structures.
Alan Perlis[1]
1 “Epigrams on Programming,” ACM SIGPLAN 17, no. 9 (September 1982).
This chapter covers
- Persistence, sequences, and complexity
- Vectors: creating and using them in all their varieties
- Lists: Clojure’s code form data structure
- How to use persistent queues
- Persistent sets
- Thinking in maps
- Finding the position of items in a sequence
Clojure provides a rich set of composite data types, or collection types, and we’ll cover them all: vectors, lists, queues, sets, and maps. In this chapter, we’ll dig into the strengths and weaknesses of each. We’ll spend more time on vectors and maps than on the other types, because those two are used in a wider variety of circumstances and warrant the extra discussion. Finally, we’ll discuss the design of a simple function to use many of the lessons learned in this chapter, and you’ll gain specific insight into the preceding quote.
Before we look at the primary collection types individually, we’ll discuss the things they have in common. For example, you may have heard of Clojure’s sequence abstraction—all the persistent collections use it, so we’ll examine that as well as some algorithmic complexity concepts we’ll refer to throughout the chapter.