13 Holding Your Objects课后练习

时间:2022-02-03 18:33:40

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,