Java 同质或异质类型

Java Homogenous or Heterogenous types

我几周前才开始接触 Java,我偶然发现了一个相当奇怪的问题。它是关于在 Java 中创建同质或异质集合。到目前为止,我已经创建了一个通用的 BinaryTree class,它可以使用我抛给它的每一种类型。到目前为止只是基本的。 但我想知道如何实现一个集合,它可以在同一个集合中同时接受任何类型(例如 String、Double、Integer)。据我所知,集合应该是对象类型。我面临的问题是我将如何实现 witohut 必须重复我的 BinaryTree class 并且只是用对象替换泛型。是否有可能将所有内容都放在一个集合中,该集合可以同时接受相同和不同类型的对象。 对于不同类型的对象,我想我应该覆盖 compareTo 并且我计划根据它们的哈希码比较不同的对象。在这种情况下比较是无关紧要的,因为主要思想是强制集合同时采用相同和不同的类型。 我想以 ArrayList 为例,它完全可以做到这一点。

ArrayList<Object> ObejctList = new ArrayList<Object>();
ArrayList<Integer> IntList = new ArrayList<Integer>();

你可以做到

public class MyBinaryTree<T> {

    public void put(T t) { ... }

}

那你可以

new BinaryTree<Integer>

虽然 T 会被视为对象。

您可以使用 MyBinaryTree<T extends Number>

更具体

总的来说,看这里https://docs.oracle.com/javase/tutorial/java/generics/types.html

  1. 为什么不使用 TreeMap

  2. 如果你想让事情像 ArrayList 那样工作,那为什么不打开并阅读 ArrayList 的实现并做同样的事情呢?

如果您想在您的集合中接受不止一种类型,例如 (String,Double,Integer),您需要找到一个公共子类。 例如,对于 Double 和 Integer,您可以使用:

Collection<T extends Number> or Collection<? extends Number> 

但是如果你想在这里使用 String 那么你是对的你必须像这样使用 Object:

Collection<T extends Object> or Collection<? extends Object>

在这里您可以阅读更多关于泛型的信息Bounded type parameter