①集合框架的概念
父:Collection(接口)【AbstractCollection(类)】 ⇒ List (接口)【AbstractList(类)】,Set(接口)【AbstractSet(类)】
分支1:List 实现类⇒ ArrayList LinkedList Vecter
分支2:Set 实现类⇒ HashSet TreeSet
②List和Set的区别
List:有序集合,元素可以重复。
Set:无序集合,元素不可以重复。
③Set不可以重复的实现原理
HashSet: 通过Object类的hashCode方法和equals方法来实现(引用对象不是Object的时候有必要重写这两个方法)。
TreeSet:通过二叉树原理实现,具体使用两种方法实现。
①通过继承Comparable接口重写该接口的compareTo(T, o)方法实现。
②创建一个比较器Compartor通过重写Compartor(接口)的compare(T o1, T o2)方法来实现。
代码如下:
import java.util.*;
public class TreeSetDemo1 {
public static void main(String[] args)
{
TreeSet<Person> st= new TreeSet<Person>(new PersonComparator());
st.add(new Person("zhangsan005",18));
st.add(new Person("zhangsan006",20));
st.add(new Person("zhangsan002",15));
st.add(new Person("zhangsan003",19));
st.add(new Person("zhangsan001",13));
st.add(new Person("zhangsan008",15));
Iterator<Person> it = st.iterator();
while(it.hasNext())
{
Person p= it.next();
System.out.println(p.getName()+" "+p.getAge() );
}
}
}
/**
*
* 方式一:通过继承Comparable接口重写该接口的compareTo方法实现。
* @author user
class Person implements Comparable<Person>
{
private String name;
private int age;
Person(String name,int age)
{
this.name=name;
this.age=age;
}
public String getName()
{return name;}
public int getAge()
{return age;}
public int compareTo(Person p)
{
int num=this.age-p.getAge();
if(num==0)
{
num=name.compareTo(p.getName());
}
return num;
}
}
*/
/********************************************************************************************************/
/**
* 方式二:通过构造函数中添加比较器(comparator)实现
* @author user
*
*/
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name=name;
this.age=age;
}
public String getName()
{return name;}
public int getAge()
{return age;}
}
//创建一个比较器类继承Comparator接口
class PersonComparator implements Comparator<Person>
{
@Override
public int compare(Person arg0, Person arg1) {
// TODO Auto-generated method stub
int num=arg0.getAge()-arg1.getAge();
if(num==0)
{
num=arg0.getName().compareTo(arg1.getName());
}
return num;
}
}