数组
枚举
数组:是由相同类型的若干项数据组成的一个数据集合。
数组做的3件事:
1),造容器2),把数据放进去3),把数据拿出来
一维数组的声明:
数据类型[] 变量名;
例如char s[]; 和char [] s;这两个表达都OK,建议后者。
int [] i;
String [] names;
float [] f; float型数组f
Manager[] m; Manager型数组m
数组的创建:
创建的时候要指明数组的长度。如:char [] s = new char [20];创建一个长度为20的char类型数组
数组的初始化:
当创建一个数组时,每个元素都被自动使用默认值进行初始化。如果是引用类型的,则初始化为null。int型的则默认为0,float型的默认为0.0f。
数组的内存分配:
数组一旦被创建,则长度不可改变创建数组时,系统会为该数组分配内存空间,并且按照数组的长度等分
数组元素的访问:
1,普通的for循环:
public class ArrayDemo01 {
public static void main(String[] args) {
String [] names = {"jim","kate","","lily"};
for(int i=0; i< names.length; i++) {
System.out.println(names[i]);
}
}
}
public static void main(String[] args) {
String [] names = {"jim","kate","","lily"};
for(int i=0; i< names.length; i++) {
System.out.println(names[i]);
}
}
}
// result is as below
jim
kate
lily
2,增强for循环:只能取出 数组里的值,不能赋值,因为没有索引。
for(int i :a){ // 把数组a中的数字循环输出并赋值给i
System.out.print(i)}
public class ArrayDemo01 {
public static void main(String[] args) {
String [] names = {"jim","kate","","lily"};
for(String a : names) {
System.out.println(a);
}
}
}
public static void main(String[] args) {
String [] names = {"jim","kate","","lily"};
for(String a : names) {
System.out.println(a);
}
}
}
// 输出结果同上。
3, 数组的length属性指的是数组的长度,而不是数组里保存的元素的个数。很明显上面的数组names长度是4个,但是实际保存的是3个元素。
public class ArrayDemo01 {
public static void main(String[] args) {
String [] names = {"jim","kate","","lily"};
System.out.println(names.length); //结果输出4
}
}
public static void main(String[] args) {
String [] names = {"jim","kate","","lily"};
System.out.println(names.length); //结果输出4
}
}
多维数组:
二维数组其实就是一维的一维数组。有几维就有几重for循环。N维数组就是一维的N-1维数组
数组的复制:
System.arraycopy(src, srcPosotion, dest, destPosition, length)
System.arraycopy(from, fromIndex, to, toIndex, count);System.arraycopy() 拷贝的是引用,而不是对象。对象本身不改变。
例子:把数组a中的2 3 4这3个元素复制到数组b的第3个元素那里
public class ArrayCopyDemo {
public static void main(String[] args) {
int [] a = {1,2,3,4,5,6};
int [] b = {21,22,23,24,25,26,27};
System.arraycopy(a, 1, b, 2, 3);
for(int i=0; i < b.length;i++ ) {
System.out.println(b[i]);
}
}
}
//output:
//21 22 2 3 4 26 27
public class ArrayCopyDemo {
public static void main(String[] args) {
int [] a = {1,2,3,4,5,6};
int [] b = {21,22,23,24,25,26,27};
System.arraycopy(a, 1, b, 2, 3);
for(int i=0; i < b.length;i++ ) {
System.out.println(b[i]);
}
}
}
//output:
//21 22 2 3 4 26 27
数组的排序:
冒泡排序选择排序插入排序希尔排序java.util.Arrays.sort(a); 默认是升序排序
枚举
枚举里面包含着所有可能取值的常量。
枚举可以保证在编译期间检测应用使用的常量值是否合法,避免运行期逻辑错误。
枚举的本质就是一个类,编译将生成class文件。枚举里面可以定义属性,方法和构造方法。
枚举的构造方法必须是private的,这样外面就无法调取其构造方法,就是不给外面创造实例的机会
枚举的值就是这个类的实例,它是可以调方法的。