一维数组
Java的数组是引用类型,c语言的数组是在栈里的
元素为引用数据类型的数组每一个元素都要被实例化。
一维数组的声明方式 Type var[]; eg: int a1[];
什么数组时不能给数组分配长度,eg int a1[5]; //false
java中使用关键字new 创建数组对象,格式为:
【 数组名 = new 数组元素的类型 [数组元素的个数]】
动态初始化和默认初始化
动态初始化:数组定义与为数组元素分配空间和赋值的操作分开进行
默认初始化:数组时引用类型,他的元素相当于类的成员变量,因此每个元素也被按照成员变量的规则被隐式初始化
Q:args[]存放的是什么?
public class TestSearch { public static void main(String[] args) { int a[] =
{ 1, 3, 6, 8, 9, 10, 12, 18, 20, 34 }; int i = 12;
System.out.println(binarySearch(a,i)); } public static int binarySearch(int[]
a,int num) { if(a.length == 0) return -1; int startPos = 0; int endPos =
a.length - 1; int m = (startPos + endPos)/2; while(startPos <= endPos) { if(num
== a[m]) return m; if(num > a[m]) { startPos = m+1; } if(num < a[m]) { endPos =
m-1; } m = (startPos + endPos) / 2; } return -1; } } public class Count3Quit2
{ public static void main(String[] args) { KidCircle kc = new KidCircle(500);
int countNum = 0; Kid k = kc.first; while(kc.count > 1) { countNum ++;
if(countNum == 3) { countNum = 0; kc.delete(k); } k = k.right; }
System.out.println(kc.first.id); } } class Kid{ int id; Kid left; Kid right; }
class KidCircle{ int count = 0; Kid first,last; KidCircle(int n){ for(int i=0;
i<n; i++) { add(); } } void add() { Kid k = new Kid(); k.id = count; if(count
<= 0) { first = k; last = k; k.left = k; k.right = k; }else { last.right = k;
k.left = last; k.right = first; first.left = k; last = k; } count ++; } void
delete(Kid k) { if(count <= 0) { return; }else if(count == 1) { first = last =
null; }else { k.left.right = k.right; k.right.left = k.left; if(k == first) {
first = k.right; } else if( k == last) { last = k.left; } } count --; } }
学习面向对象的过程
二维数组
二维数组可以看成以数组为元素的数组。eg:
int a[][] = { {1,2},{3,4,5},{6,7}};
java中多维数组的声明和初始化应该按从高维到低维的顺序进行,
int a[][] = new int[3][]; a[0] = new int[2]; a[1] = new int[3]; a[2] = new
int[2]; int t1[][] = new int [][4]; //false
import javax.xml.crypto.Data; public class TestDateSort { public static void
main(String[] args) { Date[] days = new Date[5]; days[0] = new Date(2006,5,4);
days[1] = new Date(2006, 7, 4); days[2] = new Date(2008, 5, 4); days[3] = new
Date(2004, 5, 9); days[4] = new Date(2004, 5, 4); Date d = new Date(2006,7,4);
String str = String.valueOf(d); bubbleSort(days); for(int
i=0;i<days.length;i++) { System.out.println(days[i]); }
System.out.println(binarySearch(days,d)); } public static Date[]
bubbleSort(Date[] a) { int len = a.length; for(int i = len-1;i>=1;i--) {
for(int j = 0;j<=i-1;j++) { if(a[j].compare(a[j+1]) > 0) { Date temp = a[j];
a[j]=a[j+1]; a[j+1]=temp; } } } return a; } public static int
binarySearch(Date[] days,Date d) { if (days.length==0) return -1; int startPos
= 0; int endPos = days.length-1; int m = (startPos + endPos) / 2;
while(startPos <= endPos){ if(d.compare(days[m]) == 0) return m;
if(d.compare(days[m]) > 0) { startPos = m + 1; } if(d.compare(days[m]) < 0) {
endPos = m -1; } m = (startPos + endPos) / 2; } return -1; } } class Date { int
year,month,day; Date(int y,int m,int d){ year = y; month = m; day = d; } public
int compare(Date date) { return year > date.year ? 1 :year < date.year? -1
:month > date.month ? 1 : month < date.month ? -1 : day > date.day ? 1 : day <
date.day ? -1 : 0; } public String toString() { return "Year:Month:Day -- " +
year + "-" + month + "-" + day; } }
数组的拷贝
public static void arraycopy(Object src, int srcPos, Object dest.int
destPos,int length)