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
为什么不使用 TreeMap
?
如果你想让事情像 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
我几周前才开始接触 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
为什么不使用
TreeMap
?如果你想让事情像
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