一,数组:(定义、分配空间、赋值)
一维数组的声明:type [] var 或者 type var [];
java中试用new 创建数组对象格式为:数组名 = new 数组元素类型[数组元素个数];
注意理解基本数据类型数组和引用类型一维数组的内存分配差异。
数组的定义与初始化
1,数组动态初始化(数组的定义也就是数组的空间分配和数组元素的赋值分开进行):数组的定义与数组元素分配空间和赋值操作分开进行。
eg1: int a[];
a = new int[3];
a [0] = 1; a [1] = 2; a [2] = 3;
eg2 Date d [];
d = new Date[2];
d[0] = new Date(5,12,2008); d[1] = new Date(3,22,2011);
2,数组静态初始化:定义数组的同时就为数组元素分配空间并赋值。
eg1:int a[] = {1,2,3}; / int[] a = {1,2,3};
eg2: Date d[] = {new Date(8,8,2008),new Date(5,12,2008),new Date(3,22,2011),new Date(15,8,2011)};
数组元素默认的初始化: int 类型的默认值是0, float 和double类型默认的是0.0; String或者自定义对象是null。 eg: int[] i = new int[5]; System.out.println(i[2]);
数组的下标:从0开始到n-1。
每个数组都有一个length属性指明其长度 eg: a.length的值为数组a的长度(元素个数)
二维数组:二维数组可以看成是数组的数组,也就是以数组为元素的数组。
eg:int a[][] = {{1,2},{3,4,5},{6,7,8,9}};
多维度数组的初始化应该按照从高维到低维的顺序进行(通俗的讲就是从左到右)。从内存分配方面来理解。
eg:int a[][] = new int[3][];
a[0] = new int[2];
a[1] = new int[3];
a[2] = new int[3];
下面的做法是非法的:int a[][] = new int[][5];
数组拷贝 System.arraycopy(src, srcPos, dest, destPos, length);
二,集合
1,Collection接口:层次结构中的根元素
2,List接口:有序,可以重复
2.1,ArrayList 数组的形式存储 连续的内存存储 查找 快 插入删除慢 删除中间的元素的时候会把删除元素的后面的元素往前移动。线程不安全,效率高
2.2,LinkedList 链表的形式存储 非连续的内存存储 查找 慢 插入/删除 快 链式存储 无法根据偏移量计算出下一个元素的位置 需要遍历才能找到. 线程不安全,效率高
2.3Vector 数组的形式存储 连续的内存存储。 线程安全,效率低下。
3,Set接口:无序,不可以重复
4,Map接口:里面存放的是键值对的方法
4.1:HashMap 线程不安全的,效率高
4.2:HashTable 线程安全的,效率低
5,
6,
7,
Java数组、ArrayList、LinkedList和Vector性能比较
使用容器或者数组的 要考虑的几点:
a,内存分配
b,插入 查找 删除 的效率
c,线程安全
d,