我需要扩展AbstractTableModel来表示表中的一些数据。我有一个类< code>Car,它应该代表表中的一个项目(行):
public class Car implements Comparable<Car> {
public String make;
public int year;
public double engineVol;
public double maxSpeed;
// ...getters/setters for the fields...
public Car (String make, int year, double engineVol, double maxSpeed) {
this.make = make;
this.year = year;
this.engineVol = engineVol;
this.maxSpeed = maxSpeed;
}
@Override
public boolean equals(Object other) {
if (this == other) return true;
if (other == null || getClass() != other.getClass()) return false;
Car car = (Car) other;
if (year != car.year) return false;
if (Double.compare(car.engineVol, engineVol) != 0) return false;
if (Double.compare(car.maxSpeed, maxSpeed) != 0) return false;
return make.equals(car.make);
}
@Override
public int hashCode() {
int result;
long temp;
result = make.hashCode();
result = 31 * result + year;
temp = Double.doubleToLongBits(engineVol);
result = 31 * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(maxSpeed);
result = 31 * result + (int) (temp ^ (temp >>> 32));
return result;
}
@Override
public int compareTo(Car other) {
return this.make.compareTo(other.make);
}
}
这些Car
对象存储在HashSet
中,它驻留在CarTableModel
中:
public class CarTableModel extends AbstractTableModel {
private static final long serialVersionUID = 7927259757559420606L;
private HashSet<Car> cars;
public CarTableModel(HashSet<Car> cars) {
this.cars = cars;
}
@Override
public int getRowCount() {
return cars.size();
}
@Override
public int getColumnCount() {
return 4;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return null;
}
}
就我所知,我需要在AbstractTableModel中覆盖至少3个方法。如何为HashSet重写getValueAt?关于HashSet的rowIndex和columnIndex参数是什么?如果我们不能通过一个索引从一个哈希表中获取值,那么这些索引是如何应用到哈希表的呢?这可能吗?
附言:在这里使用HashSet不是我的任性,这是大学的作业,所以必须这样做。
您必须知道,即使您考虑使用迭代器
来获取哈希集的第n个值,顺序也是未定义的。
这里,来自JavaDoc
它不保证集合的迭代顺序;特别是,它不保证顺序将随着时间的推移保持不变。
不过,如果您真的必须使用此集合,这里是getValueAt
的实现
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Optional<Car> tmpCar = cars.stream()
.skip(rowIndex) // Assuming your rows begin with 0
.findFirst();
return tmpCar.isPresent() ? tmpCar : null;
}
您可以尝试使用LinkedHashSet
。但目前尚不清楚如何将 columnIndex
与 Car 一起使用
。
也许,番石榴的ArrayTable会帮助你。
如何为HashSet重写getValueAt?
不要使用散列表。您通常会使用ArrayList,以便按照将行添加到列表中的顺序来定义行。
例如,检查表格行模型,该模型将完成创建定制模型的过程。如果您愿意,它还提供了一个通用的表模型来简化这个过程。
在这里使用HashSet不是我的任性,这是大学的作业,所以它必须这样。
错过了那个评论。我不知道为什么需要您使用HashSet,因为没有直接的方法来访问数据。所以在我看来,每次需要一行时,您都需要遍历Set。不是很有效。
本文向大家介绍HashSet如何检查重复相关面试题,主要包含被问及HashSet如何检查重复时的应答技巧和注意事项,需要的朋友参考一下 当你把对象加入时,HashSet会先计算对象的值来判断对象加入的位置,同时也会与其他加入的对象的hashcode值作比较,如果没有相符的hashcode,HashSet会假设对象没有重复出现。但是如果发现有相同hashcode值的对象,这时会调用方法来检查hash
我正在检查< code>HashSet的< code>add方法。有人提到 如果该集合已经包含元素,则调用保持集合不变,并返回false。 但是方法在内部保存中的值 的方法声明 将指定值与该映射中的指定键相关联。如果映射先前包含该键的映射,则旧值将被替换。 那么,如果 的 方法替换了旧值,那么 方法如何在元素重复的情况下保持集合不变?
} ========================================================================================== 我希望HashSet调用equal方法,因为重写了hashCode。在equals compare之后,我想删除我要传递到hashSet的集合中的重复项。 在控制台中,它将我打印出来,为true(因为在equals
该程序将两个元素都添加到Set中。起初我很震惊,因为在向set添加方法时,调用了equals方法。 但是后来我覆盖了hashCode方法: 然后它没有添加。这是令人惊讶的,因为Set和add()方法的Javadoc表示,它在向集合中添加时只检查equals()。 这是add()的javadoc: 然后我意识到HashSet被实现为一个HashMap,在这个map中,对象的hashCode被用作键。
我下载了gatling作为maven依赖项,现在我正在寻找如何重写gatling.conf文件来配置gatling和Graphite之间的连接。 因此,我创建了一个Gatling.conf文件,如下所示: 干杯。
问题内容: 我似乎无法使实例正常工作。我使用的代码如下: 子类 该代码输出 问题答案: 您需要覆盖。而不是这样做,您实现了一个带有signature 的方法。因此,您使用的是为相等性测试定义的默认方法。 默认实现基于对象标识,因此,该集合“允许”您添加两个在语义上相等的不同对象。