13 Holding Your Objects课后练习

exercise 1

import java.util.ArrayList;

class Gerbil{
    private int gerbilNumber;
    public Gerbil(int g){
        gerbilNumber=g;
    }
    public void hop(){
        System.out.print(gerbilNumber+",");
    }
}
public class Ex1 {

    public static void main(String[]args){
        ArrayList<Gerbil>ger=new ArrayList<Gerbil>();
        for(int i=0;i<10;i++){
            ger.add(new Gerbil(i));
        }
        for(int i=0;i<ger.size();i++){
            ger.get(i).hop();
        }
        System.out.println();
        for(Gerbil g:ger){
            g.hop();
        }
    }
}

output

0,1,2,3,4,5,6,7,8,9,
0,1,2,3,4,5,6,7,8,9,

exercise 3

package exercise;

import java.util.ArrayList;

interface Selector {
    boolean end();
    Object current();
    void next();
}

public class Ex3 {
    private ArrayList<Object>items=new ArrayList<Object>();
    private int next = 0;

    public void add(Object x) {
        items.add(x);
    }

    private class SequenceSelector implements Selector {
        private int i = 0;

        public boolean end() {
            return i == items.size();
        }

        public Object current() {
            return items.get(i);
        }

        public void next() {
            if (i < items.size())
                i++;
        }
    }

    public Selector selector() {
        return new SequenceSelector();
    }

    public static void main(String[] args) {
        Ex3 sequence = new Ex3();
        for (int i = 0; i < 10; i++)
            sequence.add(Integer.toString(i));
        Selector selector = sequence.selector();
        while (!selector.end()) {
            System.out.print(selector.current() + " ");
            selector.next();
        }
    }
} /*
 * Output: 0 1 2 3 4 5 6 7 8 9
 */// :~

exercise 4

//由generator产生一些电影名称,创建array,ArrayList,HashSet,LinkedHashSet,TreeSet,
//用generator产生的名声填充,循环产生名称。

package exercise;

import java.util.*;

class Generator{

    int index=0;
    public String next(){
        switch(index){
        default:
        case 0:index++;return "a.movie1";
        case 1:index++;return "d.movie2";
        case 2:index++;return "m.movie3";
        case 3:index++;return "h.movie4";
        case 4:index++;return "l.movie5";
        case 5:index++;return "p.movie6";
        case 6:index++;return "u.movie7";
        case 7:index=0;return "f.movie8";
        }
    }   
}
public class Ex4 {

    public static void main(String[]args){
        Generator g=new Generator();

        String []arr=new String[10];
        for(int i=0;i<arr.length;i++){
            arr[i]=g.next();
        }

        ArrayList<String>Al=new ArrayList<String>();
        g.index=0;//从0开始填充
        for(int i=0;i<10;i++){
            Al.add(g.next());
        }

        LinkedList<String>Ll=new LinkedList<String>();
        g.index=0;
        for(int i=0;i<10;i++){
            Ll.add(g.next());
        }

        HashSet<String>Hs=new HashSet<String>();
        g.index=0;
        for(int i=0;i<10;i++){
            Hs.add(g.next());
        }

        LinkedHashSet<String>Lhs=new LinkedHashSet<String>();
        g.index=0;
        for(int i=0;i<10;i++){
            Lhs.add(g.next());
        }
        TreeSet<String>Ts=new TreeSet<String>();
        g.index=0;
        for(int i=0;i<10;i++){
            Ts.add(g.next());
        }

        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
        for(int i=0;i<Al.size();i++){
            System.out.print(Al.get(i)+" ");
        }
        System.out.println();
        for(int i=0;i<Ll.size();i++){
            System.out.print(Ll.get(i)+" ");
        }
        System.out.println();

        //Set没有get()方法
        System.out.println(Hs);

        System.out.println(Lhs);

        System.out.println(Ts);
    }
}

output

a.movie1 d.movie2 m.movie3 h.movie4 l.movie5 p.movie6 u.movie7 f.movie8 a.movie1 d.movie2 
a.movie1 d.movie2 m.movie3 h.movie4 l.movie5 p.movie6 u.movie7 f.movie8 a.movie1 d.movie2 
a.movie1 d.movie2 m.movie3 h.movie4 l.movie5 p.movie6 u.movie7 f.movie8 a.movie1 d.movie2 
[p.movie6, m.movie3, h.movie4, l.movie5, a.movie1, f.movie8, d.movie2, u.movie7]
[a.movie1, d.movie2, m.movie3, h.movie4, l.movie5, p.movie6, u.movie7, f.movie8]
[a.movie1, d.movie2, f.movie8, h.movie4, l.movie5, m.movie3, p.movie6, u.movie7]

exercise 5

//: holding/ListFeatures.java
import java.util.*;

public class ListFeatures {
    public static void main(String[] args) {
        Random rand = new Random(47);
        List<Pet> pets = Pets.arrayList(7);
        System.out.print("1: " + pets);
        System.out.println();
        Hamster h = new Hamster();
        pets.add(h); // Automatically resizes
        System.out.print("2: " + pets);
        System.out.println();
        System.out.print("3: " + pets.contains(h));
        System.out.println();
        pets.remove(h); // Remove by object
        Pet p = pets.get(2);
        System.out.print("4: " + p + " " + pets.indexOf(p));
        System.out.println();
        Pet cymric = new Cymric();
        System.out.print("5: " + pets.indexOf(cymric));
        System.out.println();
        System.out.print("6: " + pets.remove(cymric));
        System.out.println();
        // Must be the exact object:
        System.out.print("7: " + pets.remove(p));
        System.out.println();
        System.out.print("8: " + pets);
        System.out.println();
        pets.add(3, new Mouse()); // Insert at an index
        System.out.print("9: " + pets);
        System.out.println();
        List<Pet> sub = pets.subList(1, 4);
        System.out.print("subList: " + sub);
        System.out.println();
        System.out.print("10: " + pets.containsAll(sub));
        System.out.println();
        Collections.sort(sub); // In-place sort
        System.out.print("sorted subList: " + sub);
        System.out.println();
        // Order is not important in containsAll():
        System.out.print("11: " + pets.containsAll(sub));
        System.out.println();
        Collections.shuffle(sub, rand); // Mix it up
        System.out.print("shuffled subList: " + sub);
        System.out.println();
        System.out.print("12: " + pets.containsAll(sub));
        System.out.println();
        List<Pet> copy = new ArrayList<Pet>(pets);
        sub = Arrays.asList(pets.get(1), pets.get(4));
        System.out.print("sub: " + sub);
        System.out.println();
        copy.retainAll(sub);
        System.out.print("13: " + copy);
        System.out.println();
        copy = new ArrayList<Pet>(pets); // Get a fresh copy
        copy.remove(2); // Remove by index
        System.out.print("14: " + copy);
        System.out.println();
        copy.removeAll(sub); // Only removes exact objects
        System.out.print("15: " + copy);
        System.out.println();
        copy.set(1, new Mouse()); // Replace an element
        System.out.print("16: " + copy);
        System.out.println();
        copy.addAll(2, sub); // Insert a list in the middle
        System.out.print("17: " + copy);
        System.out.println();
        System.out.print("18: " + pets.isEmpty());
        System.out.println();
        pets.clear(); // Remove all elements
        System.out.print("19: " + pets);
        System.out.println();
        System.out.print("20: " + pets.isEmpty());
        System.out.println();
        pets.addAll(Pets.arrayList(4));
        System.out.print("21: " + pets);
        System.out.println();
        Object[] o = pets.toArray();
        System.out.print("22: " + o[3]);
        System.out.println();
        Pet[] pa = pets.toArray(new Pet[0]);
        System.out.print("23: " + pa[3].id());
        System.out.println();
    }
} /* Output:
1: [Rat, Manx, Cymric, Mutt, Pug, Cymric, Pug]
2: [Rat, Manx, Cymric, Mutt, Pug, Cymric, Pug, Hamster]
3: true
4: Cymric 2
5: -1
6: false
7: true
8: [Rat, Manx, Mutt, Pug, Cymric, Pug]
9: [Rat, Manx, Mutt, Mouse, Pug, Cymric, Pug]
subList: [Manx, Mutt, Mouse]
10: true
sorted subList: [Manx, Mouse, Mutt]
11: true
shuffled subList: [Mouse, Manx, Mutt]
12: true
sub: [Mouse, Pug]
13: [Mouse, Pug]
14: [Rat, Mouse, Mutt, Pug, Cymric, Pug]
15: [Rat, Mutt, Cymric, Pug]
16: [Rat, Mouse, Cymric, Pug]
17: [Rat, Mouse, Mouse, Pug, Cymric, Pug]
18: false
19: []
20: true
21: [Manx, Cymric, Rat, EgyptianMau]
22: EgyptianMau
23: 14
*///:~

改成Integer后

package exercise;

//holding/Ex5.java
//TIJ4 Chapter Holding, Exercise 5, page 406
/* Modify ListFeatures.java so that it uses Integers (remember 
 * autoboxing!) instead of Pets, and explain any difference in
 * results.
 */
import java.util.*;

public class Ex5 {
    // method to make a List<Integer> with random values < n:
    public static List<Integer> listOfRandInteger(int length, int n) {
        Random rand = new Random();
        List<Integer> li = new ArrayList<Integer>();
        for (int i = 0; i < length; i++)
            li.add(rand.nextInt(n));
        return li;
    }

    public static void main(String[] args) {
        Random rand = new Random();
        List<Integer> li = listOfRandInteger(7, 10);
        System.out.print("1: " + li);
        System.out.println();

        Integer h = new Integer(rand.nextInt(10));
        li.add(h);
        System.out.print("2: " + li);
        System.out.println();

        System.out.print("3: " + li.contains(h));
        System.out.println();

        // removes the first instance equivalent to Integer h:
        li.remove(h);
        System.out.print("3.5: " + li);
        System.out.println();

        Integer p = li.get(2);
        System.out.print("4: " + p + " " + li.indexOf(p));
        System.out.println();

        Integer cy = new Integer(rand.nextInt(10));
        System.out.print("5: " + cy + " " + li.indexOf(cy));
        System.out.println();

        System.out.print("6: " + li.remove(cy));
        System.out.println();

        System.out.print("7: " + li.remove(p));
        System.out.println();

        System.out.print("8: " + li);
        System.out.println();

        li.add(3, new Integer(rand.nextInt(10)));
        System.out.print("9: " + li);
        System.out.println();

        List<Integer> sub = li.subList(1, 4);
        System.out.print("sublist: " + sub);
        System.out.println();

        System.out.print("10: " + li.containsAll(sub));
        System.out.println();

        // will also sort sub elements within li:
        Collections.sort(sub);
        System.out.print("sorted sublist: " + sub);
        System.out.println();

        System.out.print("11: " + li.containsAll(sub));
        System.out.println();

        System.out.print("11.25: " + li);
        System.out.println();

        // will also shuffle sub elements within li:
        Collections.shuffle(sub, rand);
        System.out.print("11.5: " + li);
        System.out.println();

        System.out.print("shuffled sublist: " + sub);
        System.out.println();

        System.out.print("12: " + li.containsAll(sub));
        System.out.println();

        List<Integer> copy = new ArrayList<Integer>(li);
        System.out.print("12.5: " + li);
        System.out.println();

        sub = Arrays.asList(li.get(1), li.get(4));
        System.out.print("sub: " + sub);
        System.out.println();

        copy.retainAll(sub);
        System.out.print("13: " + copy);
        System.out.println();

        copy = new ArrayList<Integer>(li);
        copy.remove(2);
        System.out.print("14: " + copy);
        System.out.println();

        copy.removeAll(sub);
        System.out.print("15: " + copy);
        System.out.println();

        if (copy.size() > 1) // to avoid out of bounds exception
            copy.set(1, 8); // autoboxing int -> Integer
        System.out.print("16: " + copy);
        System.out.println();

        if (copy.size() > 2)
            copy.addAll(2, sub);
        System.out.print("17: " + copy);
        System.out.println();

        System.out.print("18: " + li.isEmpty());
        System.out.println();

        li.clear();
        System.out.print("19: " + li);
        System.out.println();

        System.out.print("20: " + li.isEmpty());
        System.out.println();

        li.addAll(listOfRandInteger(4, 10));
        System.out.print("21: " + li);
        System.out.println();

        Object[] o = li.toArray();
        System.out.print("22: " + o[3]);
        System.out.println();

        Integer[] ia = li.toArray(new Integer[0]);
        System.out.print("23: " + ia[3]);
        System.out.println();

    }
}

output

1: [5, 5, 5, 1, 8, 4, 5]
2: [5, 5, 5, 1, 8, 4, 5, 0]
3: true
3.5: [5, 5, 5, 1, 8, 4, 5]
4: 5 0
5: 4 5
6: true
7: true
8: [5, 5, 1, 8, 5]
9: [5, 5, 1, 6, 8, 5]
sublist: [5, 1, 6]
10: true
sorted sublist: [1, 5, 6]
11: true
11.25: [5, 1, 5, 6, 8, 5]
11.5: [5, 5, 6, 1, 8, 5]
shuffled sublist: [5, 6, 1]
12: true
12.5: [5, 5, 6, 1, 8, 5]
sub: [5, 8]
13: [5, 5, 8, 5]
14: [5, 5, 1, 8, 5]
15: [1]
16: [1]
17: [1]
18: false
19: []
20: true
21: [5, 4, 5, 4]
22: 4
23: 4

exercise 7

package exercise;

import java.util.*;

class A {
    int a;
    A(int a) {this.a = a;}
    public void show() {
        System.out.println(a);
    }
    public String toString(){
        return a+"";
    }
}

public class Ex7 {
    public static void main(String[] args) {
        A[] arr = new A[10];

        for (int i = 0; i < arr.length; i++) {
            arr[i]=new A(i);
        }

        ArrayList<A>list=new ArrayList<A>();

        for(A aa:arr)list.add(aa);
        System.out.println(list);

        List<A>sub=list.subList(3, 5);
        System.out.println(sub);

        ArrayList<A>subl=new ArrayList<A>(list);
        subl.removeAll(sub);
        System.out.println(list.removeAll(sub));
        System.out.println(subl);
    }
}

output

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[3, 4]
true
[0, 1, 2, 5, 6, 7, 8, 9]

exercise 8

Iterator 的用法:

package exercise;

import java.util.ArrayList;
import java.util.Iterator;

class Gerbil{
    private int ger;
    public Gerbil(int i){
        ger=i;
    }
    public void hop(){
        System.out.print(ger+",");
    }
}

public class Ex8 {

    public static void main(String[]args){
        ArrayList<Gerbil>al=new ArrayList<Gerbil>();
        for(int i=0;i<10;i++){
            al.add(new Gerbil(i));
        }
        Iterator<Gerbil>it=al.iterator();

        while(it.hasNext()){
            it.next().hop();
        }
    }
}

output

0,1,2,3,4,5,6,7,8,9,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值