容器
容器,也被称作集合(collection)
泛型
自定义泛型
泛型可以理解为是数据类型的参数化,就是在写程序时不写数据类型,把数据类型作为一个参数传入。
//实现了泛型接口的mc类(虽然可以使用任何字母,但是一般泛型默认使用T,E,V)
class mc<E> {
Object[] objs = new Object[5];
public E get (int index) {
return (E) objs[index];
}
}
容器中使用泛型
容器本质上是数据组织形式的。因此,为了针对不同类型的数据,容器都使用了泛型。
public class MyCollections {
List<String> list = new ArrayList<String>();
Set<String> set = new HashSet<String>();
Map<String,List<Integer>> map = new HashMap<String,List<Integer>>();
}
Collection接口
所有的容器都要实现Collection接口。Collection接口下面有个List接口还有一个Set接口。
List接口
特点:可重复,有顺序。
List接口常用的实现类有三个:ArrayList(底层是数组),LinkList(底层是双向链表),Vector(底层是可以动态增长的线性数组,实现了线程安全)
Map接口
特点:按照**<键,值>的方式存储成对信息**。底层使用Hash算法
Map接口最常用的实现类是HashMap,底层使用哈希表实现。其核心数组结构为Entry数组。每个Entry对象存储了hash,key,value,next四个部分的内容,是个单向链表结构。
得到一个key值后,通过hash算法计算出位置,如果此位置已经有了元素,就进行碰撞处理。
Set接口
Set接口的特点是,无序且不可重复。由于无需,则没有索引。因此查找只能采取遍历的方式。
Set的最常用实现类是HashSet类。HashSet的本质其实是一个简化的HashMap。加入新元素的方式也是HashMap的方式,只不过不进行冲突处理。而且value的部分不做考虑。由于key是不能重复的,因此HashSet天然不可重复。
Iterator接口
所有实现了Collection的容器类都有一个Iterator方法用来实现迭代器的功能。
public class MyCollections {
public static void main(String[] args){
List<String> list = new ArrayList<String>();
for(int i = 0; i < 10; ++i){
list.add("String"+i);
}
for(Iterator<String> iterator = list.iterator();iterator.hasNext();){
String temp = iterator.next();
}
}
}