容器(集合框架)
容器的概念
容器 api
Collection接口
Iterator接口
Set接口
List接口
Comparable接口
Map接口
泛型
容器的概念
集合框架被设计成要满足以下几个目标。
该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。
该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。
对一个集合的扩展和适应必须是简单的。
集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容:
接口:是代表集合的抽象数据类型。接口允许集合独立操纵其代表的细节。在面向对象的语言,接口通常形成一个层次。
实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构。
算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。
容器api
jdk所提供的容器api位于java.util包内
容器api的类图结构如下图:
Collection接口定义类存取一组对象的方法,其子接口Set和List分别定义了存储方式。
set中的数据对象没有顺序且不可以重复。
List中的数据对象有顺序且可以重复。
Map接口定义了存储“键(key)-值(value)对”的方法。
Collection接口
List接口
List和Set的区别
Set 接口实例存储的是无序的,不重复的数据。List 接口实例存储的是有序的,可以重复的元素。
Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>。
List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector> 。
ArrayList源码解析(jdk6、jdk7、jdk8)
https://blog.csdn.net/u011392897/article/details/57105709
LinkedList源码分析
https://www.cnblogs.com/leskang/p/6029780.html
Map和HashMap
https://blog.csdn.net/tuke_tuke/article/details/51588156
public class MapTest {
public static void main(String[] args) {
Map map = new HashMap();
// put()
map.put("xxx", "xxx");
map.put("yyy", "yyy");
map.put("zzz", "zzz");
map.put("zzz", "kkk");
// get()
String result = (String) map.get("xxx");
System.out.println("result : " + result);
String resultZ = (String) map.get("zzz");
System.out.println("resultZ : " + resultZ);
// remove()
map.remove("zzz");
String resultZRemove = (String) map.get("zzz");
System.out.println("resultZRemove : " + resultZRemove);
map.put("zzz", null);
String resultZNull = (String) map.get("zzz");
System.out.println("resultZNull : " + resultZNull);
// size()
int sizeResult = map.size();
System.out.println("sizeResult : " + sizeResult);
// isEmpty()
boolean isEmptyFlag = map.isEmpty();
System.out.println("isEmptyFlag : " + isEmptyFlag);
// containsKey()
boolean containsKeyFlag = map.containsKey("zzz");
System.out.println("containsKeyFlag : " + containsKeyFlag);
// containsValue()
boolean containsValueFlag = map.containsValue(null);
System.out.println("containsValueFlag : " + containsValueFlag);
// clear()
map.clear();
System.out.println(map.size());
}
}