文档介绍:数组与集合框架
金杰
目标
数组的拷贝
数组的排序、查找
Java的集合框架
List接口实现类ArrayList和LinkedList
Set接口实现类HashSet和TreeSet
Map接口实现类HashMap和TreeMap
历史集合类的用法
怎样保存你的对象?
数组-简单的线性序列
高效率容量固定(动态数组)
类型识别类型相同
能保存基本类型
如果程序的对象数量有限,且寿命可知,那么这个程序是相当简单的。
数组的长度改变
注意:数组在创建之后,其长度就不能再改变。
但可以把数组的引用指向一个新的数组。
举例:
int myArray[]=new int[6];
myArray=new int[10];
注意:如果没有别的引用指向第一个数组,则在第一个数组中的数据将会全部丢失(被垃圾回收器给回收)。
数组间的复制
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
参数:
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。
举例:
int source[ ]={ 1,2,3};
int dest[ ]={5,6,7,8};
(source, 1, dest, 1,-1);
复制结果:
dest:5,2,3,8
数组的内存分配图
基本数据类型一维数组内存分配
栈内存
堆内存
num
0088:4400
0088:4400
1
2
3
new int[3]产生的对象
num2
0088:4406
1
2
3
new int[3]产生的对象
0088:4406
对象数组的内存分配
堆内存
ss
0088:4400
0088:4400
Student[] ss;
ss=new Student[3];
new students[3]产生的对象
null
null
null
栈内存
对象数组的内存分配
堆内存
ss
0088:4400
Student[] ss;
ss=new Student[3];
ss[0]=new Student(“lisi”,18);
0088:4400
new students[3]产生的对象
null
null
student[0]
标识的
Student对象
lisi
18
0088:4660
0088:4660
栈内存
0088:4480
ss2
null
null
0088:4660
0088:4480
数组的相关操作
数组的排序:()。
对象数组的排序需要定义自然比较规则或实现比较器
在已排序的数组中查找某个元素:()。
注:()搜索数组之前请确保数组已经过了排序.
数组的缺陷
一般来说,程序都是根据具体情况在不断地创建新的对象,而这些情况又只有在程序运行的时候才能确定。不到运行时你是不会知道你到底需要多少对象,甚至是什么类型的对象。所以你不能指望用命名的reference 来持有每个对象:MyObject myReference;
原因就在于,你不可能知道究竟需要多少这样的对象。
数组的不足
不能自动调整大小
不能实现快速的添加和删除对象
不能存放不同类型的对象
不能实现key_value
如何解决这个问题?