数组的学习

数组定义:数组是基础的线性存储结构,可以有效的实现一组变量的关联。本质在于一组相关变量的集合,但是注意:Java语言定义为引用数据类型,那么会有内存分配,就一定会有new来处理。

数组的定义格式:

数组的动态初始化:初始化之后数组每一个元素的保存内容为其对应数据类型的默认值。

声明并初始化数组:数据类型 数组名称【】 = new 数据类型 【长度】;

数据类型 【】 数组名称 = new 数据类型 【长度】;

数组的静态初始化:在数组定义的时候就为其设置好了里面内容。

简化格式: 数据类型 数组名称 【】 = new数据类型【】{数据1,数据2,数据3,........};

数组里面可以通过脚标进行每一个元素的访问,脚标从0开始定义。如果使用的时候超过了数组脚标范围,则会出现“ArrayIndexOutBounds进行数组操作的时候往往会用for循坏。”

package com.java;

public class ArrayDemo {
	public static void main(String args[])
	{
		int data [] = new int [3];
		data[0] = 11;
		data[1] = 23;
		data[2] = 34;
		for(int i = 0;i < data.length;i++) {
			System.out.println(data[i]);
		}
	}
}

使用数组的静态初始化

int data [] = new int [] {11,23,34};

对于数组来说拿到数据之后循坏控制。

数组引用传递分析:

在使用数组过程中使用了关键字new进行了内存开辟,一定存在内存的关系匹配。

foreach迭代输出:

传统数组大部分使用for循坏来进行数组的遍历,从而下标对程序的影响(如果下标处理不当则会出现数组越界异常),所以参考了.net设计增强型的for循坏(foreach),利用foreach的语法结构可以直接自动获取数组每一个元素,避免下标访问。

for(数据类型 变量 : 数组 集合){}

	public static void main(String args[])
	{
		int data [] = new int [3];
		data[0] = 11;
		data[1] = 23;
		data[2] = 34;
	for(int temp : data) {
		System.out.println(temp);
	}
	}
}

好处是避免下标操作。

二维数组:

之前的数组就好比一行数据。

数组的动态初始化 :

数据类型 数组名称【】【】 = new 数据类型 【行个数】【列个数】

数组的静态初始化:

数据类型 数组名称 【】【】 = new 数据类型 【】【】{{数据},{数据}}

public class ArrayDemo {
	public static void main(String args[])
	{
		int data [][] = new int [][]{
			{1,2,3},{2,3,4,5},{3,4,5}};
		for(int x = 0;x < data.length;x++)
			{
		for(int y = 0;y < data[x].length;y++)
			{
				System.out.println(data[x][y]);
			}
			System.out.println();
			}

		}
	}

利用foraeach()进行遍历数组

	public static void main(String args[])
	{
		int data [][] = new int [][]{
			{1,2,3},{2,3,4,5},{3,4,5}};
for(int xxx [] : data) {
	for(int yyy  : xxx) {
		System.out.println(yyy+".");
		
	}
	System.out.println();
}
		}
	}

数组排序的代码

public class ArrayUtil {
 public static void sort(int data[]) {
	for(int x = 0;x < data.length;x++)
	{
		for(int y = 0;y < data.length -x - 1;y++)
		{
			if(data[y] > data[y+1]) {
				int temp = data[y];
				data[y] = data[y+1];
				data[y + 1] = temp;
				
			}
				
			}
		}
	}
	 public static void printArray(int temp [])
	 {
		 for (int x = 0;x <temp.length;x++)
		 {
			 System.out.print(temp[x] + ".");
		 }
		 System.out.println();
	 }
 }
 public static void main(String args[])
	{
		int data [] = new int []{8,9,1,2,5,7,10,4,3,6};
	  ArrayUtil.sort(data);
      ArrayUtil.printArray(data);		
		}
	
	}

数组反转进行前后转置处理:

	int data [] = new int [] {1,2,3,4,5,6,7,8,9,10};
	int center = data.length/2;
    int head = 0;
int tail = data.length - 1;
for(int x = 0;x < center;x++)
{
int temp = data [head];
data[head] = data [tail];
data[tail] = temp;
head ++;
tail --;}
	

开发时候为了方便开发采用了

java.util.Arrays.sort(数组名称)进行排序,

数组拷贝

System.arraycopy(源数组,源数组开始点,目标数组,目标数组开始点,拷贝长度)

方法可变参数:

class ArrayUtil
	public static int sum(int ... data)
	{
		int sum = 0;
		for (int temp: data)
		{
			sum += temp;
		}
		return sum;
	}
void main
System.out.println(ArrayUtil.sum(1,2,3));
System.out.println(ArrayUtil.sum(new int[]{1,2,3}));

特点:参数接收灵活。

对象数组

动态初始化: 类 对象数组名称【】 = new 类【长度】,每一个元素内容都是null

静态初始化: 类 对象数组名称 【】 = new 类 【】{实例化对象,实例化对象。。。}

class Person{
private String name ;
private int age;
public Person(String name,int age){
this.name = name ;
this.age = age;
}
public String getInfo(){
return "姓名" + this.name + "年龄" + this.age;}
setter,getter略
}
pubilc class ArratDemo{
public static void main(String args[])
{
Person per = new Person[3];
per[0] = new Person("张三",20);
per[1] = new Person("张四",20);
per[2] = new Person("张五",20);
}
for(int x = 0;x <per.length;x++){
System.out.println(per[x].getInfo())}}

引用传递案例

public class Person {
		private String name;
		private int age;
		private Car car;
		public Person(String name,int age){//定义有参构造
			 this.name = name;//为类中赋值
			 this.age = age;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public int getAge() {
			return age;
		}
		public void setAge(int age) {
			this.age = age;
		}
		public Car getCar() {
			return car;
		}
		public void setCar(Car car) {
			this.car = car;
		}
	public String getInfo() {
		return "姓名:" + this.name + "年龄" + this.age;
	}
		}
public class Car {
private String name;
private double price;
private Person person;
public Car(String name,double price)
{
   this.name = name;
   this.price = price;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public double getPrice() {
	return price;
}
public void setPrice(double price) {
	this.price = price;
}
public Person getPerson() {
	return person;
}
public void setPerson(Person person) {
	this.person = person;
}
public String getInfo() {
	return ("汽车品牌" + this.name  + ",汽车价格" + this.price);
}
}
	Person person = new Person("王布二",20);
		Car car = new Car("奥迪",1000000);
		person.setCar(car);
		car.setPerson(person);
		System.out.println(person.getCar().getInfo());
		System.out.println(car.getPerson().getInfo());

数据表与简单Java类的基本映射关系:

数据实体表 = 类的定义;

表中字段 = 类的成员属性;

表中一行数据 = 类中的一个实例化对象;

多行数据 = 对象数组;

数组学习的总结代码

		
	public static void main(String args[])
    {Member memA = new Member("mldn-a","张三");
		Member memB = new Member("mldn-b","李四");
		Role roleA = new Role(1l,"管理");
		Role roleB = new Role(2l,"操作");
		Privalege priA = new Privalege(0001L, "SAJD");
		Privalege priB = new Privalege(0002L, "AJD");
		Privalege priC = new Privalege(0003L, "JD");
		Privalege priD = new Privalege(0004L, "SAD");
		Privalege priE = new Privalege(0005L, "SJD");
		roleA.setPrivaleges(new Privalege[] {priA,priB,priC});
		roleB.setPrivaleges(new Privalege[] {priD,priE});
		priA.setRole(roleA);
		priB.setRole(roleA);
		priC.setRole(roleA);
		memA.setRoles(new Role[] {roleA,roleB});
		memB.setRoles(new Role[]{roleA,roleB});
		roleA.setMember(new Member[] {memA,memB});
		roleB.setMember(new Member[] {memA});
		System.out.println(memB.getInfo());
		for (int x = 0;x < memB.getRoles().length; x++) {
			System.out.println(memB.getRoles()[x].getInfo());
			for(int y = 0;y < memB.getRoles()[x].getPrivaleges().length;y++) {
				System.out.println(memB.getRoles()[x].getPrivaleges()[y].getInfo());
			}
		}
	}
}
public class Privalege {
	private long pid;
	private String title;
	private Role role;
	public Privalege(long pid,String title) {
		this.pid = pid;
		this.title = title;
	}
	public void setRole(Role role)
	{
		this.role = role;
	}
	public Role getRole() {
		return this.role;
	}
	public String getInfo() {
     return "[权限信息]" + this.pid + "[title=]" + this.title;

}
}
public class Role {
private long rid;
private String title;
private Member members[];
private Privalege privaleges[];
public Role(long rid,String title) {
	this.rid = rid;
	this.title = title;
	}
public void setMember(Member members[]) {
	this.members = members;
}
public Member [] getMembers() {
return this.members;
}
public void setPrivaleges(Privalege privaleges[]) {
	this.privaleges = privaleges;
}
public Privalege[] getPrivaleges(){
return this.privaleges;
}
	public String getInfo() {
		return "[角色信息]=" + this.rid + "title =" + this.title;
	}
}
public class Member {
private String mid;
private String name;
private Role roles[];
public Member(String mid,String name) {
	this.mid = mid;
	this.name = name;
	}
public void setRoles(Role roles[]) {
	this.roles = roles;
}
public Role[] getRoles() {
   return this.roles;
}
	public String getInfo() {
		return"用户信息mid=" + this.mid + "name=" + this.name;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值