1、java 数组详解(包括数据的初始化、比较、排序、重要方法)2012-12-21 09:08:54 我来说两句 作者:dannor2010 收藏 我要投稿一维数组声明方式:java type var 或 type var; 例子:int a , int a;Java 中使用关键字 new 创建数组对象,格式为:数组名 = new 数组元素的类型 数组元素的个数例子: int s ; s = new int5 ; 或者也可以自己创建类java view plaincopyPeople p ; p = new people10; 代码:java public class Study / publi
2、c static void main(String args) / int a = new int5; / People p; / p = new People10; / / / class People / / public static void main(String args) int a; a = new int5; for(int i=0; i aj) int temp; temp = aj; aj = ai; ai = temp; return a; 3、选择排序算法我们主要介绍简单选择排序、树型选择排序和堆排序。简单排序:在简单选择排序过程中,所需移动记录的次数比较少。最好情况
3、下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录。最坏情况下,即待排序记录初始状态是按逆序排列的,则需要移动记录的次数最多为 3( n-1) 。简单选择过程中需要进行的比较次数与初始状态下待排序的记录序列的排列情况无关。当 i=1 时,需进行 n-1 次比较;当 i=2 时,需进行 n-2 次比较;依次类推,共需要进行的比较次数是 =(n-1)+(n-2)+2+1=n(n-1)/2,即进行比较操作的时间复杂度为 O(n2)。这种方法其实是对冒泡排序的深入。java public class Study public static void main(String args) int
4、 a = 5, 4, 2, 4, 9, 1 ; selectSort(a); for (int i : a) System.out.println(i); public static int selectSort(int args) for (int i = 0; i argsj) min = j; if (min != i) int temp = argsi; argsi = argsmin; argsmin = temp; return args; 4、插入排序算法包括:直接插入排序,二分插入排序(又称折半插入排序) ,链表插入排序,希尔排序(又称缩小增量排序) 。直接插入排序:java
5、public class Study public static void main(String args) int a = 5, 4, 2, 4, 9, 1 ; insertSort(a); for (int i : a) System.out.println(i); public static int insertSort(int args) / 插入排序算法 for (int i = 1; i 0; j-) if (argsj low; j-) / 把从 low 开始以后或 high+1 以后的元素向后移动,插入 Rj = Rj - 1;/ 移动元素 Rlow = temp;/ 插入在
6、合适的位置 return R; 二分查找:二分查找原理很容易懂,想象为二叉查找树就明白了。java int binarySearch(int a, int value) int low = 0; int high = a.length-1; while(low value) high = mid-1; else low = mid +1; return -1; 5、快速排序算法通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序。java void quickSort(int a, int low, int hi
7、gh) p = get(a, low, high); quickSort(a, low, p-1); quickSort(a, p+1, high); int get(int a, int low, int high) compare = alow; while(low =compare) high-; /在 lowcompare 并置换 temp = alow; alow = ahigh; ahigh = temp; return low; /while(low=hight)停止循环, 并返回枢轴位置 数组重要方法一、填充数组:Arrays.fill()方法 缺点:填充的数据单一。用法 1:
8、接受 2 个参数Arrays.fill( a1, value );注:a1 是一个数组变量,value 是一个 a1 中元素数据类型的值,作用:填充 a1 数组中的每个元素都是 value例如:java public class Study public static void main(String args) int a = new int5; Arrays.fill(a, 1); for (int i : a) System.out.println(i); 输出结果为:java 1 用法 2:接受 4 个参数第一个参数指操作的数组,第二个和第三个指在该数组的某个区域插入第四个参数,第二个
9、参数指起始元素下标(包含该下标) ,第三个参数指结束下标(不包含该下标) ,注意:java 的数组下标从 0 开始例如:java public class Study public static void main(String args) int a = new int5; Arrays.fill(a, 1); Arrays.fill(a, 1, 3, 2); for (int i : a) System.out.println(i); 结果:java 1 二、复制数组:clone()方法 clone()方法,限制:全部复制,无法部分的复制。java public class Study p
10、ublic static void main(String args) int a = new int5; int b; Arrays.fill(a, 1); b = a.clone(); for (int i : b) System.out.println(i); 结果:java 三、比较数组:Arrays.equala()方法 comparable 接口:compareTo()方法 , 实现 comparable 接口的类有了自身的比较功能 comparator 接口:compare() 方法和 equals()方法 一般只需实现 compare()方法 用于编写自定义的比较方法 例子:定
11、义 Person 类,对该类进行比较java public class Person String firstname, lastname; Boolean sex; int age; public Person(String firstname, String lastname, Boolean sex, Integer age) super(); this.firstname = firstname; this.lastname = lastname; this.sex = sex; this.age = age; public String getFirstname() return f
12、irstname; public void setFirstname(String firstname) this.firstname = firstname; public String getLastname() return lastname; public void setLastname(String lastname) this.lastname = lastname; public Boolean getSex() return sex; public void setSex(Boolean sex) this.sex = sex; public Integer getAge()
13、 return age; public void setAge(Integer age) this.age = age; 实现 Comparator,定义自定义比较器import java.util.Comparator;public class PersonComparator implements Comparator Overridepublic int compare(Person arg0, Person arg1) if (arg0.getAge() arg1.getAge() return -1;return 1;测试比较器java public class Study publ
14、ic static void main(String args) Person p = new Person(“ouyang“, “feng“, Boolean.TRUE, 27), new Person(“zhuang“, “gw“, Boolean.TRUE, 26), new Person(“zhuang“, “gw“, Boolean.FALSE, 28), new Person(“zhuang“, “gw“, Boolean.FALSE, 24); Arrays.sort(p, new PersonComparator(); for (Person person : p) Syste
15、m.out.println(person.getFirstname(); System.out.println(person.getLastname(); System.out.println(person.getAge(); System.out.println(person.getSex(); System.out.println(); 四、数组排序:Arrays.sort()方法 在排序中已经提到了五、查找数组:Arrays.binarySearch() 方法 缺点:数组必须已经过了排序,否则结果无法预料 java public class Study public static voi
16、d main(String args) int a = 1, 2, 4, 5, 3; Arrays.sort(a); System.out.println(Arrays.binarySearch(a, 3); 六、显示数组数据 1)数组存放的是对象,如字符串:可以使用 Arrays.asList 方法将数组转换为 List 容器后显示。 2)数据是基本类型:可以使用 for(int i:array) System.out.println(i); 显示 3) Arrays.toString()方法 java public class Study public static void main(String args) int a = 1, 2, 4, 5, 3, 1; System.out.println(Arrays.toString(a); for (int i : a) System.out.println(i);