set:无序,不可以重复元素。
1.hashset
数据结构是哈希表,线程是非同步的。
保证元素唯一性的原理:判断元素的hashcode值是否相同。
如果相同,还会继续判断元素的equals方法,是否为true。
2.treeset
可以对set集合中的元素进行排序。
底层数据结构是二叉树,保证元素唯一性的依据。
1)如果传入的是字符串等简单元素,(按照名称,从a-z,从0-9.。。。。)
2)如果传入的是对象元素。就需要复写比较方法。
class TreeSetDemo
{
//..........main方法
{
//.....新建一个TreeSet对象ts
//当ts中存入数据的的时候,会自动调用已经复写好的compareTo方法,
//因为Student实现了comparable接口,强制执行此方法。
ts.add(new Student("lisi01",33));
ts.add(new Student("lisi004",35));
//.....创建取出对象的迭代器即可。
}
}
class Student implements Comparable//该接口强制让学生具备比较性。
{
//......定义属性的动作
//复写比较方法compareTo
public int compareTo(Object obj)
{
if(!(obj instanceof Student))
{
thorw new RuntimeException("不是学生对象");
}
Student s = (Student)obj;
if(this.age>s.age)
return 1;
if(this.age==s.age)
//如果确认年龄相等就是同一个人,就直接返回0.
//return =0;
//可是,如果年龄相同,还要判断姓名,就需要再判断一次
//用名字排序,字符串自动实现comparable接口。
return this.name.compareTo(s.name);
return -1;
}
}
|
|