Set子接口

set是Colletion接口的子接口,它和List接口的区别如下:

List接口:有序、有下标、元素可以重复

set接口:无序、无下标、元素不可重复

set接口的所有抽象方法源自它的父接口Colletion,set接口有两个实现类,一个是Hashset(存储结构为哈希表),另外一个是treeset

class Demo01{
    public static void main (String [args]){
        Set<String> set = new HashSet<String>();
        //添加元素 
        set.add("华为");
        set.add("三星");
        set.add("苹果");
         //删除元素
        set.remove("小米");
        //遍历元素
        Iterator<String> it = set.iterator();
        while(it.hasnext){
            System.out.println(it.next);
        }
    }
}

treeset实现类是通过红黑树(二叉查找树)的结构进行存储,它的特点是可以自动对传进来的元素进行排序,无法添加重复元素。

注意点:

  1. 在使用Treeset实现类创建集合,添加引用类型的元素时(如对象实例),该元素要实现Comparable接口,否则会抛出类型转换异常
  2. 实现Comparable接口以后要重写该接口的compareto方法,(红黑树存储结构特点,比根节点大的数据存在右边,比他小的存在左边,该方法是用来设置该集合需要比较的属性)以此来完成排序
  3. 创建对象时也可以直接使用Treeset类的构造器传进来一个comparetor这样不用实现Comparable接口,在当前类里重写compare方法定义比较规则
import java.util.Comparator;
import java.util.TreeSet;

public class Demo05 {
    public static void main(String[] args) {
        //创建treeset集合且直接使用匿名类的方式定义一个比较器Comparator
        TreeSet treeSet = new TreeSet<Person>(new Comparator<Person>() { 
		//定义比较规则
            @Override
            public int compare(Person o1, Person o2) {
                //比较年龄,把较小的值排在前面
               
                int i1 = o1.getAge()-o2.getAge();//计算值赋给i1
                //比较名字,负整数说明前一个名字较小,0表示相同,正整数说明前一个名字较大
                
                int i2 = o1.getName().compareTo(o2.getName());//计算值赋给i2
                //定义返回规则,i1的结果是0说明比较的两个对象年龄相同进行名字的比较,把名字较小的返回
                return i1==0?i2:i1;
            }
        });
        Person p1 = new Person(18,"zhangsan");
        Person p2 = new Person(9,"lisi");
        Person p3 = new Person(30,"wangwu");
        treeSet.add(p1);
        treeSet.add(p2);
        treeSet.add(p3);
        System.out.println("元素个数"+treeSet.size());
        System.out.println(treeSet.toString());

    }
}
posted @   萧何i  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示