数组
当我们需要储存数据时,我们可以使用数组来储存对象数据,但是数组比较有局限性,比如定义了一个数组,声明长度为10,没有使用完,会继续占用资源,浪费资源,假如数据超过了10条,那么数组又放不下
package lesson1;
public class UseArray {
public static void main(String[] args) {
int[] array = new int[5];
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
array[6] = 5;
}
}
输出结果是
出现的数组索引越界异常。
集合框架
而针对数组的不足之处,推出了集合框架如下图所示
Iterator叫做 “迭代器”,它提供一种方法访问一个容器(container) 对象中各个元素,而又不需暴露该对象的内部细节}由于Collection接口继承了Iterator, 所以所有集合对象都可以被迭代,Collection接口内定义了iterator()方法,能获得一个Iterator迭代器,从而实现对集合的迭代。
集合框架的三大组件:Map 、list、set,三大组件都是接口。
使用接口时都要实例化实现类,
list接口有三个实现类:
ArrayList:底层数据结构是数组,查询快,增删慢;
LinkedList:底层数据结构是链表,增删快,查询慢。
Vector:底层数据结构是数组,查询快,增删慢。线程安全。
list集合是个会自动增长,有序的,动态的,元素可重复的,非同步的集合类。
set接口有三个实现类:
HashSet:为快速查找而设计的Set,依赖hashCode()和equals()方法保证元素的唯一性。如果没有其他限制,这就是我们的默认选择,因为他对速度进行了优化。
TreeSet:保证元素处于排序状态,底层为树结构,元素必须实现Comparable接口。
LinkedHashSet:具有HsahSet的查询速度,内部使用链表维护元素的顺序(插入的次序)在使用迭代器遍历Set时,结果会按元素插入的次序显示。元素也必须定义hashCode()方法。
set集合:是无序的,一般用的较少。
Map接口有六个实现类:HashMap;LinkedHashMap;TreeMap;WeakHashMap;ConcurrentHashMap;IdentityHashMap。
Map集合:里边存放的是无序的键值对(key:value)形式的值,”key“值不能重复,因为Map是无序的,所以最后存放的值会把key值相同的已经存放的值给替代。
泛型
是对集合储存类型的约束和规范。