Set
Set是不包含重复元素的集合
继承自Collection接口,Collection接口中没有get()方法
Set要使用iterator()或toArray()
Set实现类
HashSet:散列存放
public class Demo_Set {
public static void main(String[] args) {
//HashSet是Set的子类,不能存相同的数据
//不是顺序存储的
HashSet<String> set = new HashSet<>();
set.add("111");
set.add("222");
set.add("333");
set.add("我");
set.add("5");
for (String a:set){
System.out.println(a);
}
}
}
TreeSet
存储有序
根据其元素的自然顺序进行排序(按照ASCII码)
此类的iterator方法返回的迭代器是快速失败的 :如果在创建迭代器之后的任何时间修改集合,除了通过迭代器自己的remove方法之外,迭代器将抛出ConcurrentModificationException
public class Demo_Set {
public static void main(String[] args) {
TreeSet<String> data = new TreeSet<>();
data.add("B");
data.add("A");
data.add("D");
data.add("C");
for (String a:data ) {
System.out.println(a);
}
}
}
TreeSet只能自动存储系统定义的数据,如果要存储自定义类型,需要手动写存储数据的比较方法
public class Demo_Set {
public static void main(String[] args) {
TreeSet<Person> data = new TreeSet<>();
Person p1 = new Person("李",11);
Person p2 = new Person("王",10);
data.add(p1);
data.add(p2);
for (Person a : data) {
System.out.println(a);
}
}
static class Person implements Comparable<Person> {
private String name;
private int age;
//必须手写比较方法
@Override
public int compareTo(Person o) {
//this 与 o比较
//返回的数据: 负数this小/0一样大/正数this大
if(this.age>o.age){
return 1;
}else if(this.age<o.age){
return -1;
}
return 0;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}