ADT is a set of objects and operations, no where in an ADT’s definitions is there any mention of how the set of operations is implemented. Programmers who use collections only need to know how to instantiate and access data in some pre-determined manner, without concerns for the details of the collections implementations. In other words, from a user’s perspective, a collection is an abstraction, and for this reason, in computer science, some collections are referred to as abstract data types (ADTs). The user is only concern with learning its interface, or the set of operations its performs.
Object such as lists, sets and graphs along with their operations can be viewed as abstract data types. ADTs are basically data types that hides its implementation details. Any part of a program that needs to perform an operation on ADT can do so by merely changing the routines that performs the ADT operations. The program that use them (ADT) will not necessarily need to know which implementation was used
Developers of collections(ADTs) are concerned with implementing all operations in the most efficient manner possible, with the goal of providing the best performance to usrs of ADTs. Numerous implementations are usually possible however, many of these takes much space and time that they can be dismissed as pointless.
In computer science, we use abstraction as a technique for ignoring or hiding details that are , for the main moments non essential and we often build up a software system later by layer, with each layer treated as an abstraction by the layers above, that utilize it. Without abstractions, we would need to consider all aspects of a software system simultaneously