Software developers routinely need to store data elements together in a collection. To do so, they select a collection data-structure: a way to store data in memory. Which data-structure the developer picks has a significant impact of performance. Unfortunately, despite the time developers spend learning about the advantages and drawbacks of each data structure, they often make poor decisions in this regard.
The purpose of this project is to build tools that would help developers choosing the data-structure that will yield the best performance for their programs. We focus on Java programs using the Java Collections Framework, and use running time as a metric for performance.
The point of this project is to make computer programs run faster. There are many ways to do this, but we focus on one: How the computer stores information in memory.
Imagine a book. Some books have words in alphabetical order, they are called dictionaries. Most books have words ordered a different way, so that when you read them, the words make a story. Both are fine, it depends what you care about. Dictionaries are good when you want to look for a specific word, but story books are made to be read from the beginning to the end.
When a computer works, it also works with many "books", which fill its memory. How information is organized in a book is what we call a data-structure. If you pick the wrong type of organization, it takes a long time to the computer to find what you're looking for. This research project is about making tools that help software developers use the right organization for the books they have to manage.