通用SortedSet中E的java创建与数组
作为示例,我正在用java开发一个简单的MySortedSet<E>
,它实现了SortedSet<E>
接口。它由一个简单的数组E[] array
进行备份
关于这一点,我有几个问题:
这是一个类:(我不是在写完整的代码,而是相关的部分)
public class MySortedSet<E> implements SortedSet<E>, Iterator<E> {
private E[] array;
private Comparator<? super E> _comparator;
private int size = 0;
private int capacity;
@SuppressWarnings("unchecked")
public MySortedSet() {
this.capacity = 10;
this.array = (E[]) new Object[this.capacity];
// this.array = Array.newInstance(Class<E> var,int size);
// We have to get Class<E> from outside caller.
}
}
问题1:有人能告诉我是否有更好的解决方案,在构造函数中创建一个新数组来代替这个this.array = (E[]) new Object[this.capacity];
# 1 楼答案
要么你应该继续做你在这里做的事情,要么你应该把它作为一个
Object[]
并在输出值时强制转换它们。(例如,ArrayList
实现就是后者。)# 2 楼答案
您可以更改代码以删除不安全强制转换:
尽管它强制客户机代码提供
Class<E>
对象,但这是一种非常常见的代码模式,用于解决此类问题(在构造函数中需要类型化的Class
对象)# 3 楼答案
ArrayList<E>
stores the elements在普通的Object[]
中,原语值是自动装箱的,它被删除的元素留下实现} ,其工作原理类似于来自} 。您可以检查内部比较器的
Comparable<E>
的类必须实现^{Comparator
的^{null
并依赖于对象的自然顺序,也可以定义内部“使用自然顺序”比较器实现Binary search是一种将查找项目或将项目插入排序列表的位置所需的比较次数最小化的方法。不是从第一个元素开始检查每个元素,而是从列表的中点开始。如果要查找的项目位于找到的元素之前,则向前移动一半并重复;否则,移到一半,然后重复。每次重复时,都会使用上一个下限/上限和中点作为新的子列表,将每个步骤中的元素数减半
试着猜一个介于1和100之间的数字,每次你被告知你猜的是太高还是太低