一:数组:是一个相同数据类型的有序集合
- 定义数组:两种方式
- 数据类型[] 变量名;//例如:int[] nums; - 推荐使用这种
- 数据类型 变量名[];//例如:String names[];
- 数组的初始化:两种方式
1.静态初始化
数据类型[] 数组名 = {值1,值2,值3,....};
2.动态初始化
- 先初始化数组的长度
数据类型[] 数组名 = new 数据类型[长度];//先初始化数组的长度
- 再对数组进行赋值
数组名[0] = 值1; 数组名[1] = 值2; .......
- 数组的注意点:
- 数组的长度是固定的,一旦初始化之后就不可以修改了。
- 数组中存放的数据必须是相同数据类型
- 数组是有序的:下标从0到length-1
- 数组属于引用数据类型,所以创建的数组对象时存放在堆中。
- 数组的遍历
第一种:普通for循环遍历数组: 特点:通过数组的下标来访问数组元素
for(int i=0;i<=array.length-1;i++){
int a=array[i]//获取数组元素
}
第二种:增强for循环:for-each(专门用于遍历容器的)增强for循环只适合读取容器中的数据,不适合修改容器中的数据
for(String name:names) {
System.out.println(name);
}
- java.util.Arrays专门用于操作数组,提供的方法全部都是静态方法:
toString():以字符串的形式返回数组中所有元素的信息。(注意不是重写的Object的toString)
equals():比较两个数组的内容是否相同
copyOf():复制数组
binarySearch():二分查找(返回元素对应的下标,如果不存在,则返回负数)
sort():对数组进行排序(默认是升序)
- 基本数据类型比较值
引用数据类型的排序:
- 得使用比较器来排序,比较器有两种:内比较器和外比较器
- 内比较器:需要对象实现Comparable接口,并重写compareTo方法来指定比较的规则。
//定义Person类
class Person implements Comparable{
String name;
int age;
int money;
//比较规则:年龄大的则对象大(按照年龄升序排序),如果年龄相同,则钱money大的对象大
@Override
public int compareTo(Object o) {
//比较规则:返回正整数表示对象大,返回负整数表示对象小,返回0表示对象相等
//向下转型
if(o instanceof Person) {
Person other = (Person)o;
//开始比较
if(this.age>other.age) {
//年龄大的则对象大
return 1;
}else if(this.age<other.age) {
//返回负整数表示对象小
return -1;
}else {
//如果年龄相同,则钱money大的对象大
return this.money-other.money;
}
}
return 0;
}
public Person(String name, int age, int money) {
super();
this.name = name;
this.age = age;
this.money = money;
}
public Person() {
super();
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", money=" + money + "]";
}
外比较器:定义外比较器类加匿名内部类来实现Comparator接口,并重写compare方法来指定比较的规则。
public static void main(String []args) {
Student a = new Student("Ahana",18);
Student b = new Student("Babily",19);
int res=new Comparator() {
@Override
public int compare(Object o1, Object o2)
{
Student a1 =((Student)o1);
Student a2 =((Student)o2);
//根据年龄比较
return a1.age - a2.age;
}
}.compare(a, b);
System.out.println(res);
}