一,集合的定义
集合跟数组一样都是一种容器。
集合,1长度可变,2只能存储对象,3可以存储任何类型的对象。
数组,1,长度固定,2只能存储基本类型的数据,3同一数组中只能存储同一种数据。
注意:1,集合和数组中存放的都是对象的引用,而不是对象本身。
2,接口不能new,只能实现或继承接口。例List ll=new List();这样就会报错可以将后面的List改为ArrayList就正确了。
集合中的几个接口Collection,Map,List,Set.
3 ,在集合进行遍历时,不能再遍历中进行增删改查操作,但是在迭代器中可以。
4,List可以放重复的null元素,因为null是对象,
5,ArrayList和hashmap在使用时最好初始化大小,减少内部扩容。因为是数组,所以初始化长度只能是2^n,最小是16,32,
6,hashmap的k可以存放null,但只能存放一个,因为k不重复。
7,用接口定义功能,用实现功能,这种技术称为解耦技术(解开耦合),集合正是使用了这种技术。用List等接口定义功能,用ArrayList等实现类实现功能。
二,集合的分类及使用
1,Collection接口通常不能直接使用,但是该接口提供了添加删除管理数据的方法,由于List接口和Set接口都实现了他的方法,因此这些方法对List和Set集合都是通用的。Collection中没有set,get方法,但ArrayList中有。
方法如下:
1 2 3 4 5 |
|
注意:Collection的方法addAll,ContainsAll,RemoveAll的方法都是集合。
2, List是有序可重复的集合,所以除了继承Collection的方法外,增加了一些根据索引操作集合元素的方法。
1,set( int index, E element)注意这里element是修改后元素的值,但是此方法返回的值是要被修改的值。
2,get(int index) 查找元素,可能下标越界。
3,indexof(object 0) 在集合寻找对象第一次出现的位置,没有返回-1。
4,lastindexof(object 0) 在集合寻找对象最后一次出现的位置,没有返回-1。
5,求子集合 List<E> subList(int fromIndex, int toIndex) // 不包含toIndex
ArrayList
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
Vector
底层数据结构是数组,查询快,增删慢,实现方式与ArrayList相同
线程安全,效率低
LinkedList
底层数据结构是链表,查询慢,增删快(因为只要改变指正所指的地址即可)
线程不安全,效率高
三者的区别:
1,初始容量都为10,但ArrayList默认增长为原来的50%,原码采用位运算。而Vector默认增长为原来的一倍,并且可以设置
2,对于随机访问get和set(查询操作),ArrayList要优于LinkedList,因为LinkedList要移动指针
3,对于增删操作(addi和remove),LinkedList优于ArrayList
3,set无序不可重复