持有对象:就是创建一个属性,只不过此处是创建对象,利用持有对方的引用来访问类的成员变量。
1.创建一个新类Gerbil(沙鼠),包含intgerbilNumber,在构造器中初始化它(类似于本章的Mouse示例)。添加一个方法hop(),用以打印沙鼠的号码以及它正在跳跃的息。创建一个ArrayList,并向其中添加一串Gerbil对象。使用get()遍历List,并且对每个Gerbil调用hop()。
public class Gerbil {
private int gerbilNumber;
public int getGerbilNumber() {
return gerbilNumber;
}
public void setGerbilNumber(int gerbilNumber){
this.gerbilNumber = gerbilNumber;
}
public Gerbil(int gerbilNumber) {
setGerbilNumber(gerbilNumber);
}
private void hop() {
System.out.println("gerbilnumber = " + gerbilNumber);
}
public static void main(String[] args) {
ArrayList<Gerbil> gerbilList = new ArrayList<Gerbil>();
gerbilList.add(new Gerbil(1));
gerbilList.add(new Gerbil(3));
gerbilList.add(new Gerbil(5));
gerbilList.add(new Gerbil(7));
for (Gerbil gerbil : gerbilList) {
gerbil.hop();
}
}
}
2.修改SimpleCollection.java,使用Set来表示c。
public class SimpleCollection{
public static void main(String[] args) {
Set<Integer> c = new LinkedHashSet<Integer>();
int i = 0;
while (i < 20) {
c.add(i++);
}
for (Integer integer : c) {
System.out.print(integer + " ");
}
}
}
3.略
4.创建一个生成器类,它可以在每次调用其next()方法时,产生你由你最喜欢的电影的字符构成的名字(作为String对象)。
在字符列表中的电影名用完之后,循环到这个字符列表的开始处。使用这个生成器来填充 数组、ArrayList、LinkedList、
HashSet、LinkedHashSet和TreeSet,然后打印每一个容器。
public class Generator {
int key = 0;
public String next() {
switch (key) {
default:
case 0:key++;return "山丘";
case 1:key++;return "漂洋过海来看你";
case 2:key++;return "鬼迷心窍";
case 3:key++;return "我是真的爱你";
case 4:key++;return "凡人歌";
case 5:key++;return "我是一只小小鸟";
case 6:key=0;return "再回首";
}
}
public void fill(String[] s) { //填充数组
for(int i = 0; i < s.length; i++){
s[i] = next();
}
}
public Collection<String> shift(Collection<String> c,int n){
for (int i = 0; i < n; i++) {
c.add(next());
}
return c;
}
public static void main(String[] args) {
Generator generator = new Generator();
String[] s = new String[7];
generator.fill(s);
for (String str : s)
System.out.println(str+" ");
System.out.println(generator.shift(new ArrayList<String>(), 7));
System.out.println(generator.shift(new LinkedList<String>(), 7));
System.out.println(generator.shift(new HashSet<String>(), 7));
System.out.println(generator.shift(new LinkedHashSet<String>(), 7));
System.out.println(generator.shift(new TreeSet<String>(), 7));
}
}
5、6、7.略
8.修改练习1,以便调用hop()时使用Iterator遍历List.
public class Gerbil {
private int gerbilNumber;
public int getGerbilNumber() {
return gerbilNumber;
}
public void setGerbilNumber(int gerbilNumber){
this.gerbilNumber = gerbilNumber;
}
public Gerbil(int gerbilNumber) {
setGerbilNumber(gerbilNumber);
}
public void hop() {
System.out.println("gerbilnumber = " + gerbilNumber);
}
public static void main(String[] args) {
ArrayList<Gerbil> gerbilList = new ArrayList<Gerbil>();
gerbilList.add(new Gerbil(1));
gerbilList.add(new Gerbil(3));
gerbilList.add(new Gerbil(5));
gerbilList.add(new Gerbil(7));
Iterator it = gerbilList.iterator();
while(it.hasNext()){
((Gerbil) it.next()).hop();
}
}
}
9、10.略
11.写一个方法,使用Iterator遍历Collection,并打印容器中每个对象的toString(). 填充各种类型的Collection然后对其使用此方法
public class Iterator {
public static void traverse(Collection c){
Iterator it = c.iterator();
while(it.hasNext())
System.out.print(it.next()+ " ");
System.out.println();
}
public static void main(String[] args) {
//省略LinkedList、HashSet、TreeSet、LinkedHashSet
ArrayList<Integer> al = new ArrayList<Integer>(Arrays.asList(1,2,3));
traverse(al);
}
}
14.取List的中间坐标,在插入时通过list.size/2 获取List的中间坐标,之后插入。
17.使用练习1中的Gerbill类,将其放入Map中,将每个Gerbil的名字(例如Fuzzy或Spot)String(键) 与每个Gerbil(值)关联起来。为KeySet()获取Iterator,使用它遍历Map,针对每个"键"查询 Gerbil,然后打印出 "键",并让gerbil执行hop()。
public class Gerbil {
private int gerbilNumber;
public int getGerbilNumber() {
return gerbilNumber;
}
public void setGerbilNumber(int gerbilNumber){
this.gerbilNumber = gerbilNumber;
}
public Gerbil(int gerbilNumber) {
setGerbilNumber(gerbilNumber);
}
public void hop() {
System.out.println("gerbilnumber = " + gerbilNumber);
}
public static void main(String[] args) {
Map<String,Gerbil> gerbilMap = new HashMap<String,Gerbil>();
gerbilMap.put("1", new Gerbil(1));
gerbilMap.put("2", new Gerbil(3));
gerbilMap.put("3", new Gerbil(5));
gerbilMap.put("4", new Gerbil(7));
Iterator it = gerbilMap.keySet().iterator();
while(it.hasNext()){
String s = (String) it.next();
System.out.println(s+" ");
gerbilMap.get(s).hop();
}
}
}
27.写一个称为Command的类,它包含一个String域和一个显示该string的operation()方法。
写第二个类,它具有一个使用Command对象来填充一个Queue并返回这个对象的方法。
将填充后的Queue传递给第三个类的一个方法,该方法消耗掉Queue中的对象,并调用他们的operation()方法。
class Command{ //第一个类
String str;
public Command(String str) {
this.str = str;
}
void operation() {
System.out.println(str);
}
}
class Second{ //第二个类
Queue<Command> makeQ() {
Queue<Command> que = new LinkedList<Command>();
for(int i = 0; i < 5; i++)
que.offer(new Command(i+" "));
return que;
}
}
public class Test{ //第三个类
public static void temp(Queue<Command> qc) {
while(qc.peek() != null)
qc.poll().operation();
}
public static void main(String[] args) {
Second s = new Second();
temp(s.makeQ());
}
}