接口 Set

Set集合:无序不可重复;无序代表数据存进去什么顺序取出来就不一定是这个顺序了;另外Set集合没有下标,并且不可重复

HashSet
底层实际上new了一个HasdMap集合;向HasdSet中存储元素实际上是存储到了HasdMap集合中;HasdMap底层是一个哈希表数据结构

接口SortedSet

因为继承了Set接口 SortedSet特点也是无序不可重复;但是放在SortedSet中的元素可以自动排序;称为排序集合;放到该集合中的元素会按照从大到小或者从小到大排序;

TreeSet
new Tree的时候底层实际是new一个 TreeMap集合实际上是将数据放到了 TreeMap中了 底层实际采用了二叉树数据结构 TreeSet集合无序不可重复但是可以按照元素大小自动排序。成为可排序集合

无序存入的顺序与取出的顺序不同并且没有下标

TreeSet不可以对没有继承java.lang.Comparable接口的自定义类型排序
会出现 classcastException

继承java.lang.Comparable接口并且实现compareTo方法。equals可以不写

继承Comparable接口重写实现自定义类的比较

public static void main(String[] args) {

person p1=new person(20);
person p2=new person(22);
person p3=new person(2);
person p4=new person(80);
person p5=new person(30);
//创建TreeSet集合
TreeSet set=new TreeSet();
set.add(p1);
set.add(p2);
set.add(p3);
set.add(p4);
set.add(p5);
for(person p:set){
System.out.println§;

}
//继承Comparable< >可比较的这个接口
class person implements Comparable{
public person(int age) {
super();
this.age = age;
}

@Override
public String toString() {
return “person [age=” + age + “]”;
}

int age;

/**

  • 重写Comparable接口里的比较方法;或者说比较的规则按什么进行比较
    *k.comparableTo(T.key)
  • 拿着参数k和集合里面的每一个k进行比较返回值可能是>0,<0,=0,
  • 比较规则最终还是程序员来定的:例如按照年龄升序。或者按照年龄降序。
  • @param o
  • @return

*/

@Override
public int compareTo(person o) {//01.compareTo(o2)
// this是o1,
// o是o2 ,
// o1和o2比较的时候就是this和o的比较
// int age1=this.age;
// int age2=o.age;
// if(age1==age2){
// return 0;
// }else if(age1>age2){
// return 1;
// }else{
// return -1;
// }

//↓这个是简便写法

return this.age-o.age;

}

}

比较器

public static void main(String[] args) {

person p1=new person(20);
person p2=new person(22);
person p3=new person(2);
person p4=new person(80);
person p5=new person(30);
//创建TreeSet集合的时候要使用比较器
//TreeSet set=new TreeSet()这样是不行的没有通过构造方法传递一个比较器进去
TreeSet set=new TreeSet(new personComparator());
set.add(p1);
set.add(p2);
set.add(p3);
set.add(p4);
set.add(p5);
for(person p:set){
System.out.println§;

}

}
}

//继承Comparable< >可比较的这个接口
class person{
public person(int age) {
super();
this.age = age;
}

@Override
public String toString() {
return “person [age=” + age + “]”;
}

int age;

}
//比较器实现的是java.util.Comparator接口(Comparable是java.long包下的Comparator是java.util包下的)
class personComparator implements Comparator{

@Override
public int compare(person o1, person o2) {
// TODO Auto-generated method stub
return o1.age-o2.age;
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值