Java编程思想学习笔记(十四) 第15章 泛型

8 篇文章 0 订阅

RTTI:Run Time Type Identification
泛型的概念:适合许多许多的类型。核心概念:告诉编译器想使用什么类型,然后编译器帮你处理一切细节。

/**
 * 泛型示例:
 */
public class ClassName<T> {}

一个元组类库

//: net/mindview/util/TwoTuple.java
package net.mindview.util;

public class TwoTuple<A, B> {
    public final A first;    
    // final 声明可以保护public元素,阻止实例对象对其的的访问,编译错误。
    public final B second;
    public TwoTuple(A a, B b) {
        first = a, second = b;
    }
    public String toString() {
        return "(" + first + ", " + second + ")";
    }
}///:~

/** 
 * 利用继承机制实现昌都更长的元组
 */
//: net/mindview/util/TwoTuple.java
package net.mindview.util;

public class FourTuple<A, B, C, D> extends TwoTuple {
    public final C third;
    public final D fourth;
    public FourTuple(A a, B b, C c, D d) {
        super(a, b);
        third = c, fourth = d;
    }
    public String toString() {
        StringBuilder sb = new StringBuilder(super.toString());
        return sb.delete(sb.length - 2, sb.length -1).toString() + 
            ", " + third + ", " + fourth + ")";
    }
}

一个堆栈类

/**
 * 不使用LinkedList实现栈内部的链式存储机制
 */
//: generics/LinkedStack.java
// A stack implemented with an internal linked structure.

public class LinkedStack<T> {
    private static class Node<U> {    // 泛型内部类
        U item;
        Node<U> next;

        Node() {
            item = null, next = null;
        }
        Node(U item, Node<U> next) {
            this.item = item;
            this.next = next;
        }

        boolean end() {
            return item == null && next == null;
        }
    }

    private Node<T> top = new Node<T>(); // End sentinel

    public void push(T item) {
        // 每调用一次push(),都会创建一个Node<T>对象,并将其链接到前一个Node<T>对象。
        top = new Node<T>(item, top);
    }

    public T pop() {
        T result = top.item;
        if(!top.end()) {
            // 丢弃当前的Node<T>对象,并将top指向下一个Node<T>。
            top = top.next;
        }
        return result;
    }

    public static void main(String[] args) {
        LinkedStack<String> lss = new LinkedStack<String>();
        for(String s : "Phasers on stun!".split(" ")) {
            lss.push(s);
        }
        String s;
        while(null != (s = lss.pop())) {
            System.out.println(s);
        }
    }
}/* Output:
stun!
on
Phasers
*///:~

RandomList

//: generics/RandomList.java
import java.util.*;

public class RandomList<T> {
    private ArrayList<T> storage = new ArrayList<T>();
    private Random rand = new Random(47);

    public void add(T item) {
        storage.add(item);
    }
    public T select() {
        return storage.get(rand.nextInt(storage.size()));
    }

    public static void main(String[] args) {
        RandomList<String> rs = new RandomList<String>();
        for(String s: ("The quick brown fox jumped over " +
            "the lazy brown dog").split(" ")) {
            rs.add(s);
        }
        for(int i = 0; i < 11; i++) {
            System.out.println(rs.select() + " ");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值