数组
数组定义(相同数据类型的有序集合)
如何理解数组也是对象
四个特点
- 长度确定,大小是不可以被改变的
- 元素类型必须是相同类型
- 数组类型可以是任何数据类型,基本类型和引用类型
- 数组变量属于引用类型,数组也是对象,数组中的元素就是对象的属性
创建数组和初始化
默认初始化
- int型初始化默认值是0
- Boolean型初始化默认为false
- String型默认初始化为null
int a2[ ] = new int[2]; // 默认值:0,0
boolean[ ] b = new boolean[2]; // 默认值:false,false
String[ ] s = new String[2]; // 默认值:null, null
动态初始化
- 动态初始化通过下标赋值
int[ ] a1 = new int[2];//动态初始化数组,先分配空间;
a1[0]=1;//给数组元素赋值;
a1[1]=2;//给数组元素赋值;
静态初始化
int [ ] a = { 1, 2, 3 };// 静态初始化基本类型数组;
Man[ ] mans = { new Man(1, 1), new Man(2, 2) };// 静态初始化引用类型数组
遍历(增强for循环)&初始化
package com.ssc.array;
public class ArrayRef {
public static void main(String[] args) {
Man m = new Man(10,"孙少聪");
//静态初始化碧血在申明后直接初始化
Man[] uMans = {
m, //相当于 uMans[0]=m
new Man(10,"熊举举"),
new Man(10,"和佳佳"),
new Man(10,"徐贵冬"),
new Man(10,"王秋红")
};
for(int i=0;i<uMans.length;i++) {
System.out.println(uMans[i].getName());
}
//增强for循环
for(Man man:uMans) {
System.out.println(man);
}
}
}
class Man{
private int id;
private String name;
public Man() {}
/**
* @param id
* @param name
*/
public Man(int id, String name) {
super(); //写不写都行
this.id = id;
this.name = name;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "id:"+id+", name:"+this.name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
数组拷贝&排序&填充
- static void arraycopy(object src,int srcpos,object dest,int destpos,int length)
该方法可以将 src 数组里的元素值赋给 dest 数组的元素,其中 srcpos 指定从 src 数组的第几个元素开始赋值,length 参数指定将 src 数组的多少个元素赋给 dest 数组的元 - System.arraycopy(str, 0, strCopy, 0, str.length);
- Arrays.sort(str1);
- Arrays.binarySearch(str1, 102)
- Arrays.toString(str1)
- Arrays.fill(str1 ,2, 4, 100);
package com.ssc.array;
import java.util.Arrays;
public class ArrayCopy {
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] str = {"孙少聪","熊举举","和佳佳","徐贵冬"};
String[] strCopy = new String[4];
int[] str1 = {100,200,300,102,136};
//数组拷贝
System.arraycopy(str, 0, strCopy, 0, str.length);
for(String m:strCopy) {
System.out.println(m);
}
//数组排序
//toString()
Arrays.sort(str1);
System.out.println(Arrays.toString(str1));
//二分查找必须先使用sort进行排序再进行二分查找
System.out.println("数组二分查找结果:"+Arrays.binarySearch(str1, 102));
//填充,包头不包尾
//将str1里面的(2,4)元素替换为100
Arrays.fill(str1 ,2, 4, 100);
System.out.println(Arrays.toString(str1));
}
}
多维数组
多维数组初始化
package com.ssc.array.twoarray;
import java.util.Arrays;
public class TwoArray {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] uint = new int[3][];
uint[0] = new int[] { 1};
uint[1] = new int[] {1,2};
uint[2] = new int[] {1,2,3};
System.out.println(Arrays.toString(uint[0]));
//静态初始化
int[][] uint1 = new int[][] {{12,3},{2,3,4},{5,6,7}};
System.out.println(Arrays.toString(uint1[0]));
}
}
用javabean和二维数组,存储一个表格数据,并且用toString()和嵌套循环来遍历,创建方法来筛选满足条件的对象
package com.ssc.array.twoarray;
import java.util.Arrays;
public class TabelJavabean {
public static void main(String[] args) {
// TODO Auto-generated method stub
TabelJavabean a = new TabelJavabean();
Emp emp0 = new Emp(1001, "美羊羊", 20, "程序员", "2019-3-5");
Emp emp1 = new Emp(1001, "懒羊羊", 15, "程序员", "2019-3-5");
Emp emp2 = new Emp(1001, "沸羊羊", 22, "程序员", "2019-3-5");
Emp emp3 = new Emp(1001, "喜羊羊", 25, "程序员", "2019-3-5");
Emp[][] emps = new Emp[4][];
emps[0] = new Emp[] {emp0};
emps[1] = new Emp[] {emp1};
emps[2] = new Emp[] {emp2};
emps[3] = new Emp[] {emp3};
//toString遍历数组
for(int i=0;i<emps.length;i++) {
System.out.println(Arrays.toString(emps[i]));
}
System.out.println("=============================================");
//嵌套循环遍历数组
for(int i=0;i<emps.length;i++) {
for(int j=0;j<emps[i].length;j++) {
System.out.println(emps[i][j]);
}
}
System.out.println("=============================================");
//创建方法找寻符合条件的对象
//定义了一个方法来查找符合条件的对象
a.seaechAge(emps, 21);
}
public void seaechAge(Emp[][] a,int age) {
for(int i=0;i<a.length;i++) {
for(int j=0;j<a[i].length;j++) {
if(a[i][j].getAge()<=age) {
System.out.println(Arrays.toString(a[i]));
}
}
}
}
}
class Emp{
private int id;
private String name;
private int age;
private String job;
private String hiredate;
/**
*
*/
public Emp() {
super();
}
/**
* @param id
* @param name
* @param age
* @param job
* @param hiredate
*/
public Emp(int id, String name, int age, String job, String hiredate) {
super();
this.id = id;
this.name = name;
this.age = age;
this.job = job;
this.hiredate = hiredate;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return ""+getId()+'\t'+getName()+'\t'+getAge()+'\t'+getJob()+'\t'+getHiredate();
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getJob() {
return job;
}
public String getHiredate() {
return hiredate;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setHiredate(String hiredate) {
this.hiredate = hiredate;
}
}
compare接口
-
想对某个类的对象之间做比较,就需要实现 Comparable 接口。接口中只有一个方法compareTo,这个方法定义了对象之间的比较规则。 依据这个“比较规则”,我们就能对所有对象实现排序
-
public int compareTo(Object obj) obj 为要比较的对象
package com.ssc.array;
import java.util.Arrays;
import org.w3c.dom.UserDataHandler;
public class Compare {
public static void main(String[] args) {
// TODO Auto-generated method stub
Ssc[] uSsc1 = {
new Ssc(20,"孙少聪"),
new Ssc(19,"熊举举"),
new Ssc(21,"和佳佳")
};
Arrays.sort(uSsc1);
System.out.println(Arrays.toString(uSsc1));
}
}
class Ssc implements Comparable<Object>{
int age;
String name;
public Ssc(int age,String name) {
// TODO Auto-generated constructor stub
this.age = age;
this.name = name;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return this.name;
}
public int compareTo(Object o) {
Ssc uSsc= (Ssc) o;
if (this.age < uSsc.age) {
return -1;
}
if (this.age > uSsc.age) {
return 1;
}
return 0;
}
}