gpt4 book ai didi

java - 从可比数组中删除项目

转载 作者:行者123 更新时间:2023-12-01 07:55:54 25 4
gpt4 key购买 nike

我对java很陌生,我的第一个问题是这个Comparable是什么?在我的示例代码中,为什么 Class Bag<T extends Comparable<T>> ??目的是什么?

我的第二个问题是如何从这个 Comparable 数组中删除一个项目。我已经编写了removeMin方法,我已经找到了该项目,我将变量命名为“min”,我如何继续从arrayList中删除这个min项目?非常感谢!

这是一些部分代码:

public class Bag<T extends Comparable<T>> implements Iterable<T> {
private int MAX_ITEMS = 10; // initial array size
private int size;
private Comparable[] data;

public Bag( ) {
//data = (Comparable []) new Object[MAX_ITEMS];
data = (T []) new Comparable[MAX_ITEMS];
size = 0;
}

public Comparable removeMin(){
Iterator<T> iterator=iterator();
T min = iterator.next();
while (iterator.hasNext())
{
T next = iterator.next();
if (min.compareTo(next) > 0)
min = next;
****************************************************
How to remove this min item?
****************************************************
}
return min;
}

最佳答案

What is this Comparable thing?

它是一个通用接口(interface),可以由您需要能够相互比较其实例的类来实现。 Comparable<T>有一个方法int compareTo<other T> 。该方法的实现应该比较 thisother实例

In my sample code, why class Bag<T extends Comparable<T>>? What's the purpose?

这就是说你的Bag class 是一个带有类型参数 T 的泛型类。 T extends Comparable<T>位是说 T必须是某个实现 Comparable<T> 的类.

<小时/>

My second question is how to remove an item from this Comparable array.

这需要您根据您对数组工作原理的了解来弄清楚。您必须处理的最大限制是数组的大小无法更改,因此没有神奇的操作可以简单地从数组中间删除某些内容。

有两种方法:

  • 创建一个新数组,仅包含您不想删除的元素。 (提示:复制它们)

  • 在现有数组中移动元素,以“填补概念上删除元素时留下的空洞”。 (提示:注意 size 字段。它有什么用?)

假设您写了 removeMin方法从头开始,我认为您在尝试使用迭代器时已经走进了死胡同1。尝试对其进行编码以直接在data上进行操作数组。

removeMin问题有两个部分:

  1. data 中查找索引求最小元素
  2. 删除该索引处的元素

提示:第一部分要求您查看每个元素...并且必须在删除之前完成此操作。这应该反射(reflect)在您的代码中。

<小时/>

1 - 如果您使用 ArrayList<T>或类似的,然后使用 data.iterator()将是一个合理的选择。问题是数组不直接支持 Iterable API。

现在,如果您需要创建 Bag类工具Iterable<T> ,那么您可以使用您在 removeMin 中为此目的实现的迭代机制方法。但即便如此,API 也不是达到此目的的理想选择。您仍然需要迭代该集合两次。一次找到最小元素,第二次删除它。通过迭代器删除意味着迭代器需要实现可选 Iterator.remove()方法......这会让你回到原点。

关于java - 从可比数组中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30146843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com