持有對象:就是創建一個屬性,只不過此處是創建對象,利用持有對方的引用來訪問類的成員變量。
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());
}
}