Java同源或异类型

时间:2015-11-22 09:53:53

标签: java generics collections containers

几周前我刚刚开始使用Java,我偶然发现了一个相当奇怪的问题。它是关于在Java中创建同类或异构集合。到目前为止,我已经创建了一个通用的BinaryTree类,它可以使用我抛出的每个类型。到目前为止只是基本的一个。 但我想知道如何实现一个Collection,它可以在同一个集合中同时包含任何类型的内部(如String,Double,Integer)。据我所知,该集合应该是Object类型。我面临的问题是如何实现witohut不得不重复我的BinaryTree类,只是用对象替换泛型。是否可以在一个集合中创建所有可以同时采用相同和不同类型的对象的集合。 对于对象,是不同的类型,我猜我应该覆盖compareTo,我计划根据他们的哈希码比较不同的对象。在这种情况下,比较是无关紧要的,因为主要思想是强制集合同时采用相同和不同的类型。 我想以ArrayList为例,它可以做到这一点。

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

3 个答案:

答案 0 :(得分:2)

你可以做到

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 :(得分:1)

  1. 为什么不使用TreeMap

  2. 如果您想让事情像ArrayList一样有效,那么为什么不打开并阅读ArrayList的实施并做同样的事情?

答案 2 :(得分:0)

如果要在集合中接受多于一种类型,例如(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

的更多信息