朋友们,我在使用TreeSet
获取整个数据时遇到问题。我已将TreeSet
排序为相同的值。
这是我的代码:
MyCars
上课:
class MyCars implements Comparable<MyCars>{
private String number;
private int yearModel;
private double horsePower;
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public int getYearModel() {
return yearModel;
}
public void setYearModel(int yearModel) {
this.yearModel = yearModel;
}
public double getHorsePower() {
return horsePower;
}
public void setHorsePower(double horsePower) {
this.horsePower = horsePower;
}
@Override
public int compareTo(MyCars c) {
return Double.compare(this.horsePower,c.getHorsePower());
}
}
SortTest
上课:
public class SortTest {
void GoForSort(){
Set dataStructure=new TreeSet();
MyCars c1=new MyCars();
c1.setNumber("SRT-Viper123");
c1.setYearModel(2013);
c1.setHorsePower(450.00);
MyCars c2=new MyCars();
c2.setNumber("Chevrolet-Corvette901");
c2.setYearModel(2012);
c2.setHorsePower(450.00);
MyCars c3=new MyCars();
c3.setNumber("Ford-Mustang678");
c3.setYearModel(2014);
c3.setHorsePower(455.00);
dataStructure.add(c1);
dataStructure.add(c2);
dataStructure.add(c3);
Iterator<MyCars> it=dataStructure.iterator();
while(it.hasNext()){
MyCars c=it.next();
System.out.println(c.getNumber()+"\t"+c.getHorsePower()+"\t"+c.getYearModel());
}
}
public static void main(String[] args) {
SortTest st=new SortTest();
st.GoForSort();
}
}
正如您所看到的,我已根据horsePower对TreeSet
进行了排序。而且我已经将马力的SAME值赋予了两个物体。
以下是我得到的输出:
SRT-Viper123 450.0 2013
Ford-Mustang678 455.0 2014
但我也希望Chevrolet-Corvette901
进入这组输出。为什么我没有得到它。
还有什么方法可以包含它吗?因为我发现当我将我的收藏改为ArrayList
时没有问题。 TreeSet
只对唯一元素进行排序吗?
有没有任何技巧可以得到&amp;无论Iteration
...
TreeSet
期间打印所有对象
答案 0 :(得分:2)
设置不存储重复的元素。
如果您要存储两辆车,则应更改equals
和compareTo
方法以比较其数量。然后两个条目都不同。
请注意,equals
方法应与compareTo
一致,因此我强烈建议您重写equals方法。
答案 1 :(得分:2)
TreeSet
是Set
的子项,并且集合不存储重复值。以下是java docs。
不包含重复元素的集合。更正式的,集合 不包含元素e1和e2对,使得e1.equals(e2)和at 大多数一个null元素。正如其名称所暗示的,这个界面模型 数学集抽象。
答案 2 :(得分:1)
仅设置存储唯一元素。
答案 3 :(得分:1)
您有两种选择:
让您的compareTo
也比较number
和yearModel
字段。
在每个节点上存储一个集合(数组或List
) - 通常称为MultiSet。
只要您的compareTo
报告两个项目相同,其中只有一个会出现在该集合中。
答案 4 :(得分:1)
通常使用equals()
,所包含对象的唯一性由其Car.equals()
方法确定。在您的示例中,您将实现TreeSet
,如果它们具有相同的数字,modelYear和horsePower,则两个Cars将是相等的。然后你可以将你的Corvette加入到套装中,它不会与另一个具有相同马力的模型发生冲突。
equals()
不同:它确定两个对象相同,而不是true
返回compareTo()
,而TreeSet
返回0.这意味着您可以轻松找到你自己有两个TreeSet视为相同的对象,即使它们不是。
Comparator
州的文件确实如此:
请注意,如果要正确实现Set接口,则由set维护的排序(无论是否提供显式比较器)必须与equals一致。
换句话说,不破坏Set契约,TreeSet依赖于你只提供一个equals()
,它与你放在集合中的对象的Comparator
实现一致强>
由于TreeSet允许您指定任意library("partykit")
library("C50")
//Creates a sample data frame
data <- data.frame(ID = c(1, 2, 3, 4, 5),
var1 = c('a', 'b', 'c', 'd', 'e'),
var2 = c(1, 1, 0, 0, 1))
//This is the variable I want to predict
variable <- "ID"
//First I convert the column to factor
data[, variable] <- factor(data[, variable])
//Then I create the formula
formula <- as.formula(paste(variable, " ~ ."))
//And finally I fit the model with the formula
model <- C5.0(formula, data=data, trials=10)
,我们可能会更简洁,并说TreeSet会破坏Set契约。
答案 5 :(得分:0)
来自维基百科Set
在数学中,集合是不同对象的集合,它本身被视为一个对象。例如,数字2,4和6在单独考虑时是不同的对象,但是当它们被统一考虑时,它们形成一组大小为3,写成{2,4,6}。集是数学中最基本的概念之一。
Set
具有不同/唯一的元素,即没有重复。