概念
此类的iterator方法返回的迭代器是快速失败的 :如果在创建迭代器之后的任何时间修改集合,除了通过迭代器自己的remove方法之外,迭代器将抛出ConcurrentModificationException 。 因此,在并发修改的情况下,迭代器快速而干净地失败,而不是在未来的未确定时间冒任意,非确定性行为的风险。
使用
TreeSet<String> data = new TreeSet<>();
data.add("A");
data.add("D");
data.add("B");
data.add("C");
for (String s:data) {
System.out.println(s);
}
结果:
使用自定义类
package TreeSet;
import java.util.Objects;
import java.util.TreeSet;
public class TreeSetTest {
public static void main(String[] args) {
TreeSet<Person> data = new TreeSet<>();
Person p1 = new Person(18,"张三");
Person p2 = new Person(20,"李四");
data.add(p1);
data.add(p2);
for (Person s:data) {
System.out.println(s);
}
}
}
class Person implements Comparable<Person>{
private String name;
private int age;
public Person() {
}
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(age, name);
}
@Override
public int compareTo(Person o) {
if (this.age > o.age) {
return 1;
}else if (this.age == o.age) {
return 0;
}
return -1;
}
}
注意:使用自定义类比较时需要实现Comparable里的compareTo方法
//this 与 o比较
//如果this大返回1,相等返回0,小于返回-1
public int compareTo(Person o) {
if (this.age > o.age) {
return 1;
}else if (this.age == o.age) {
return 0;
}
return -1;
}
结果: