TreeSet:拥有指定的排序方式
>Comparable:自然排序
①需要添加到TreeSet 集合中对象的类,实现Comparable接口
②实现接口中的抽象方法compareTo(Object o)
package collection;
public class Person implements Comparable{
private String name;
private Integer age;
public Person() {
}
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Object o) {
if (o instanceof Person){
Person p=(Person) o;
if (this.getAge().equals(p.getAge())){
return this.getName().compareTo(p.getName());
}
return this.getAge().compareTo(p.getAge());
}
return 0;
}
}
package collection;
import org.junit.Test;
import java.util.HashSet;
import java.util.TreeSet;
/*
集合框架:
java.util.Collection:集合层次的根接口
/--java.util.List:有序的,允许重复的;List系列集合都具有索引值
/--ArrayList:采用数组结构存储元素;(多用在查询操作多时,增删效率低,查询效率高)
/--LinkedList:采用链表结构存储元素;(多用于增删操作多时,增删效率高)
/--Vector:
/--java.util.Set:无序的,不允许重复的;
/--HashSet:是Set 接口的典型实现类;判断元素是否存在的依据是,先比较hashCode(),若hashCode不存在,则直接存储
若hashCode存在,则再通过equals()比较两个对象的内容
注意:重写HashCode()和equals()方法时,两者要保持一致!
/--LinkedHashSet:是HashSet的子类,相似于HashSet多了链表维护元素的顺序,遍历效率高于HashSet
增删效率低于HashSet
/--TreeSet:拥有指定的排序方式
*/
public class SetTest {
@Test
public void test1(){
HashSet hs=new HashSet();
hs.add("CC");
hs.add("BB");
hs.add("AA");
hs.add("DD");
hs.add("EE");
hs.add(new Person("李四",18));
hs.add(new Person("张三",20));
hs.add("BB");
String str1=new String("BB");
String str2=new String("BB");
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
System.out.println("-----------------");
Person p1=new Person("张三",18);
Person p2=new Person("张三",18);
System.out.println(p1.hashCode());
System.out.println(p2.hashCode());
System.out.println(hs);
}
@Test
public void test2(){
TreeSet ts=new TreeSet();
/*ts.add("AA");
ts.add("BB");
ts.add("EE");
ts.add("CC");
ts.add("DD");*/
/*ts.add(33);
ts.add(11);
ts.add(44);
ts.add(55);
ts.add(22);*/
/*ts.add(33);
ts.add(11);
ts.add(44);
ts.add("AA");
ts.add("BB");*/
ts.add(new Person("张三",15));
ts.add(new Person("王五",22));
ts.add(new Person("李四",33));
ts.add(new Person("赵六",21));
System.out.println(ts);
}
}
总代吗:
package collection;
import org.junit.Test;
import java.util.HashSet;
import java.util.TreeSet;
/*
集合框架:
java.util.Collection:集合层次的根接口
/--java.util.List:有序的,允许重复的;List系列集合都具有索引值
/--ArrayList:采用数组结构存储元素;(多用在查询操作多时,增删效率低,查询效率高)
/--LinkedList:采用链表结构存储元素;(多用于增删操作多时,增删效率高)
/--Vector:
/--java.util.Set:无序的,不允许重复的;
/--HashSet:是Set 接口的典型实现类;判断元素是否存在的依据是,先比较hashCode(),若hashCode不存在,则直接存储
若hashCode存在,则再通过equals()比较两个对象的内容
注意:重写HashCode()和equals()方法时,两者要保持一致!
/--LinkedHashSet:是HashSet的子类,相似于HashSet多了链表维护元素的顺序,遍历效率高于HashSet
增删效率低于HashSet
/--TreeSet:拥有指定的排序方式
>Comparable:自然排序
①需要添加到TreeSet 集合中对象的类,实现Comparable接口
②实现接口中的抽象方法compareTo(Object o)
*/
public class SetTest {
@Test
public void test1(){
HashSet hs=new HashSet();
hs.add("CC");
hs.add("BB");
hs.add("AA");
hs.add("DD");
hs.add("EE");
hs.add(new Person("李四",18));
hs.add(new Person("张三",20));
hs.add("BB");
String str1=new String("BB");
String str2=new String("BB");
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
System.out.println("-----------------");
Person p1=new Person("张三",18);
Person p2=new Person("张三",18);
System.out.println(p1.hashCode());
System.out.println(p2.hashCode());
System.out.println(hs);
}
@Test
public void test2(){
TreeSet ts=new TreeSet();
/*ts.add("AA");
ts.add("BB");
ts.add("EE");
ts.add("CC");
ts.add("DD");*/
/*ts.add(33);
ts.add(11);
ts.add(44);
ts.add(55);
ts.add(22);*/
/*ts.add(33);
ts.add(11);
ts.add(44);
ts.add("AA");
ts.add("BB");*/
ts.add(new Person("张三",15));
ts.add(new Person("王五",22));
ts.add(new Person("李四",33));
ts.add(new Person("赵六",21));
ts.add(new Person("赵六666",21));
ts.add(new Person("赵六",21));
System.out.println(ts);
}
}