我想要一个具有以下要求的Collection:
1。)在插入元素之前,它检查是否已经存在具有相同名称的元素,如果有,则不插入元素
2。)插入后,集合会自动按集合中人员的工资进行排序
我插入名字和工资的人作为属性。
哪个系列符合这些要求?
答案 0 :(得分:1)
TreeSet怎么样? 您可能需要使用constructor with a Comparator。
答案 1 :(得分:0)
SortedSet将是完美的。 您只需要实现Comparable接口并比较人员的工资。
答案 2 :(得分:0)
您可以使用TreeSet并实现Comparator来对所需的proprty进行排序。看到 this样本。
要丢弃重复条目,您需要返回0值;
public int compare(Empl e1, Empl e2) {
if(e1.getName().equals(e2.getName())) {
return 0;
}else if(e1.getSalary() > e2.getSalary()){
return 1;
}else if(e1.getSalary() == e2.getSalary() && (e1.getName().compareTo(e2.getName()) > 1)) {
return 1; // if the salary is equal, sort it based on name.
}
else {
return -1;
}
}
答案 3 :(得分:0)
对于SortedSet会很好,但不要忘记实现接口COMPARABLE。
答案 4 :(得分:0)
您可以在HashSet上使用TreeSet,但Person必须实现Comparable接口(int compareTo(Person o)方法)并覆盖equals和hashCode方法以仅基于name字段检查identity / unique。 首先创建Person并实现/覆盖方法:
public class Person implements Comparable<Person> {
public Person(String name, double salary) {
this.name = name;
this.salary = salary;
}
public Person() {
}
private String name;
private Double salary;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Person{" + "name=" + name + ", salary=" + salary + '}';
}
public int compareTo(Person o) {
return salary.compareTo(o.getSalary());
}
@Override
public int hashCode() {
int hash = 7;
hash = 53 * hash + (this.name != null ? this.name.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Person other = (Person) obj;
if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
return false;
}
return true;
}
}
然后创建一个HashSet并用Person元素填充它。该集合将仅包含具有唯一name属性的元素,这通过仅使用equals和hashCode方法中的name字段来完成。 要保持集合排序 - 使用参数化构造函数创建TreeSet - 新的TreeSet(集合coll),您已经使用唯一元素填充了集合,因此排序将在TreeSet初始化期间进行。
以下是片段的其余部分
public class TestPerson {
public static void main(String [] args){
Person p1 = new Person("first", 1000);
Person p2 = new Person("second", 2000);
Person p3 = new Person("third", 3000);
Person p4 = new Person("first", 4000);
Person p5 = new Person("second", 5000);
TreeSet<Person> personSet = new TreeSet<Person>();
personSet.add(p1);
personSet.add(p2);
personSet.add(p3);
personSet.add(p4);
personSet.add(p5);
for (Person person : personSet){
System.out.println(" === person element sorted : "+person);
}
HashSet<Person> personHashSet = new HashSet<Person>();
personHashSet.add(p1);
personHashSet.add(p2);
personHashSet.add(p3);
personHashSet.add(p4);
personHashSet.add(p5);
TreeSet<Person> treePersonSet = new TreeSet<Person>(personHashSet);
for (Person person : treePersonSet){
System.out.println(" === person element: "+person);
}
}
}