在《Thinking in Java》里面读到Holding一章中的Set,有如下代码:
package holding;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class SetOfInteger {
public static void main(String [] args){
Random random= new Random(7);
Set<Integer> intest= new HashSet<Integer>();
for(int i = 0; i<1000;i++)
intest.add(random.nextInt(30));
System.out.println(intest);
}
}
我想,是时候该了解这里面真正说的东西了。我们来一行行的分析这个简单的代码语句。
(1)package holding;是当前程序文件所在的包名;
(2)三行import语句是导入Java类库中的类与实现方法;
(3)在main方法中,我们使用了Random random= new Random(47),在这一语句中,Random是Java类库中的一个类,用来创建一个伪随机数,new Random(47),则是传递一个long型数字作为构造参数。在这里我粘贴上Random的构造方法。根据构造方法我们即可大致了解Random类的作用了。
- public Random(long seed)
Creates a new random number generator using a single long
seed. The seed is the initial value of the internal state of the pseudorandom number generator which is maintained by method next(int)
. The invocation new Random(seed)
is equivalent to:
Random rnd = new Random(); rnd.setSeed(seed);
参数: seed
- the initial seed
(4)Set<Integer> intest = new HashSet<Integer>();这行语句的意思是,我们使用Set容器,来持有对象,而这里的持有对象的意思就是类似于int这样的整型数组来保存对象一样,只不过在int型数组中有固定的大小,但是在哎Set容器里面,大小是不固定的。而Set<Integer>中的<Integer>又是什么意思呢?这里代表的是这个Set数组【其实是容器】里面只允许装在Integer类型的数据。------->可能又有人要问了,Integer又是什么类型,我们知道在Java里面,有八大基本类型,我们在使用这八大基本类型时,是不需要new一个对象的,而是直接拿来使用,这八个基本类型是分别是:int,long,short,char,boolean,float,double,byte。例如我们在使用这几个基本类型时,我们是直接类似于这样使用:int a=10;而不是int a = new int ();这个样子,在Java中,为了解决这个问题,Java设计者们就将这八大类型包装成了包装器类型。
分别对应如下:
boolean---->Boolean
int ----> Integer
char ----> Character
long ----> Long
short ----> Short
float ----> Float
double ----> Double
byte ----> Byte
(5)而后面的new HashSet<Integer>();则是因为Java类库中,Set只是一个纯接口,没有具体的实现类。我们在这里使用其子类HashSet来创建对象。之所以可以将HashSet类型的对象传递给Set是因为Java中向上转型的允许。【注:那么什么又是向上转型呢?我们经常继承一个类,这个问题呢,包括笔者在写到此处时,我也想了想,但是却无从说起……还请各位读者原谅】
(6)在for循环中,使用了intest.add(random.nextInt());这行语句说的是我们使用HashSet容器中的一个叫做add()的方法【面向对象思想】,而add()方法中的参数则是使用random.nextInt()返回得到。这里的nextInt()方法的使用,我们可以依然可有查看其使用方法。【注:这里可能又有同学问了,那么是怎么看到这个java类库中的文件呢这里便不再做介绍了,如想知道该怎么在eclipse里面查看类库中的方法请见我上一篇博客】
(7)然后,我们到了最后一行代码处,System.out.println(intest);那么这行代码看着简单,又有什么意思呢?事情原来是这个样子的,toString()方法是默认的打印行为,也就是说,是容器类本身所拥有的一种方法,那么我们就知道了,在调用System.out.println(intest)时,就会默认调用toString()方法,然后打印出来。
好了,程序的一个运行过程大致如此,菜鸟上路,中间若有写纰漏,还恳请读者指出,感激不尽。