使用数组:
Int[] a=new int[N];
a[i]=100;
Int[] b=a;
b[i]=111;
//a[i]也会变成111;
这种情况称为取别名,如果想要复制整个数组,应该如下所示:
Int[] a=new int[N];
Int[] b=new int[N];
for(int i=0;i<a.length;i++)
b[i]=a[i];
或者
Int[] a=new int[N];
a[5]=10;
Int[] b=new int[N];
System.arraycopy(a,0,b,0,10);
方法的性质:
方法的参数按值传递:在方法中参数变量的使用方法和局部变量相同,唯一不同的是参数变量的初始值是由调用方提供的,方法处理的是参数的值,而非参数本身,这种方法产生的结果是在静态方法中改变一个参数变量的值对调用者没有影响。因此值传递中如果传递的是数组,将会是原数组的别名。
String s1=”hello”;
String s2=s1;
s1=”world”;
System.out.println(s1); //display world
System.out.println(s2); //display hello
实现改变一个对象的参数状态并不难,因为方法中得到的是对象的引用的拷贝,对象引用及其他拷贝均是指同一个对象。
Java的泛型中的参数是不允许使用原始类型的,都需要使用引用类型如Integer。
Java中使用泛型数组列表ArrayList时,可以用以下语句进行创建
ArrayList<Type> a=new ArrayList<Type>();
也可以省略等号右边的类型参数Type,即ArrayList<Type> a=new ArrayList<>();
如果已经清楚或者估计出数组可能的数据存储数量,可以把初始容量传递给ArrayList构造器。
ArrayList<Type> a=new ArrayList<>(100);
注意:数组列表的容量和数组大小有很大的区别,如果为数组分配100个元素的存储空间,那么数组就只有100个存储空间可供使用,而容量为100的数组只是拥有保存100个元素的潜力,如果重新分配的话,其空间能够超越100个,但在最初,数组列表不具有任何元素。
所以如果采取把初始容量传递给构造器的方法创建数组,其空间大小为0。
ArrayList<Integer> a=new ArrayList<>(100);
System.out.println(a.size());//display 0;
在C++中,如果用一个向量赋值给另一个向量,如a=b相当于为a构造一个和b长度一样的新向量,并且把b中每个元素的值都赋给a。但在java中,这条语句的操作结果是让a和b引用同一个数组列表。
使用add方法为数组添加新元素,而不要使用set方法,它只能替换数组中已经存在的元素内容。
为什么java要不辞辛苦地引入借口,而不是像以下的代码一样设计成抽象类?
abstract class Comparable
{
public abstract int comparableTo(object other);
}
然后,Employer类再直接扩展这个抽象类,并提供comparableTo的实现方法:
class Employer extends Comparable
{
public int comparableTo(object other);
}
这是因为,使用抽象类表示通用属性存在这样一个问题:每个类只能扩展一个类,假设Employer已经继承了一个类如person,就无法再继承Comparable类了。
class Employer extends person,Comparable //This is ERROR
{
//.....
}
但是一个类可以实现多个接口,如
class Employer extends person implements Comparable //This is OK
{
//.....
}
集合类数据类型的基本操作之一就是,能够使用foreach语句通过迭代遍历并处理集合中的每个元素。
Iterator<String> i=collection.iterator();
....
For(String s:collection)
System.out.println(s);
...
这段代码展示了一些在任意可迭代的集合数据类型中我们都需要实现的东西:
1、集合数据类型必须实现一个iterator()方法并返回一个Iterator对象
2、Iterator类必须包含两个方法:hasNext()(返回一个布尔值)和next()(返回集合中的一个泛型元素)。
要使一个类可迭代,第一步就是在它的声明中加入implements Iterable <Item>,对应的接口(即java.lang.Iterable)为:
public interface Iterable<Item>
{
Iterator<Item> iterator();
}