Java语言程序设计原书第11版(进阶版)编程练习题答案 第19章 泛型

19.1  (修改程序清单19-1) 修改程序清单19-1中的GenericStack类,使用数组而不是ArrayList来实现它。你应该在给栈添加新元素之前检查数组的大小。如果数组满了,就创建一个新数组,该数组是当前数组大小的两倍,然后将当前数组的元素复制到新数组中。

public class GenericStack<E> {
    public final static int INITIAL_SIZE = 16;
    private E[] elements;
    private int size;

    //使用默认的初始容量构造一个堆栈
    public GenericStack() {
        this(INITIAL_SIZE);
    }

    //构造具有指定初始容量的堆栈
    public GenericStack(int initialCapacity) {
        elements = (E[])new Object[initialCapacity];
    }

    //添加一个新的元素到栈顶
    public void push(E value) {
        if (size >= elements.length) {
            E[] temp = (E[])new Object[elements.length * 2];
            System.arraycopy(elements, 0, temp, 0, elements.length);
            elements = temp;
        }
        elements[size] = value;
        size++;
    }

    //返回并移除栈顶元素
    public E pop() {
        return elements[--size];
    }

    //返回栈顶元素
    public E peek() {
        return elements[size - 1];
    }

    //判空
    public boolean isEmpty() {
        return size == 0;
    }

    //返回栈中的元素数目
    public int getSize() {
        return size;
    }
}

19.2  (使用继承实现Generic Stack) 程序清单19-1中, GenericStack是使用组合实现的。定义一个新的继承自ArrayList的栈类。画出UML类图, 然后实现GenericStack。编写一个测试程序,提示用户输人5个字符串,然后以逆序显示它们。

import java.util.ArrayList;
import java.util.Scanner;

public class GenericStack2<E> extends ArrayList<E> {
    public static void main(String[] args) {
        System.out.println("请输入五个字符串: ");
        Scanner input = new Scanner(System.in);
        GenericStack2<String> strings = new GenericStack2<>();
        for (int i = 0; i < 5; i++) {
            strings.add(input.nextLine());
        }
        for (int i = 0; i < 5; i++) {
            System.out.println(strings.pop());
        }
    }

    public int getsize(){
        return size();
    }

    public E peek(){
        return get(getsize()-1);
    }

    public void push(E o){
        add(o);
    }

    public E pop(){
        E o = get(getsize()-1);
        remove(getsize()-1);
        return o;
    }
    public boolean isEmpty(){
        return isEmpty();
    }

    @Override
    public String toString() {
        return "stack: " + super.toString();
    }
}

19.3  (ArrayList中的不同元素) 编写以下方法, 返回一个新的ArrayList。新的列表中包含来自原列表中的不重复元素。

  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值