杰神之Java集合中的Set(懒人版)

Set

今天博主太累了,不想分类了,例子都在里面,内容都在注释上,自己瞅吧
今天例子用到的类:


public class Person {
    private String name;
    private int age;
    public Person() {
        super();
        // TODO Auto-generated constructor stub
    }
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "名字:"+name+" 年龄"+age;
    }
    //之后使用系统自动生成的hashCode和equals方法
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + age;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)//如果两个对象地址一样
            return true;//返回true
        if (obj == null)//如果传进来的对象是null
            return false;//返回false
        if (getClass() != obj.getClass())//如果两个对象不是一个类创建出来的
            return false;               //就返回false
        Person other = (Person) obj;
        if (age != other.age)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))//使用字符串类的比较
            return false;
        return true;
    }

//  @Override
//  public boolean equals(Object obj) {
//      // TODO Auto-generated method stub
//      Person person =(Person)obj;
//      return this.name.equals(person.getName())&&this.age==person.getAge();
//  }
//  //重写hashCode方法
//  //Set集合在进行存储的时候
//  //当hashCode值相同时 
//  //会调用equals方法 进行对比 是同一个对象就不存
//  //当hashCode不同时,没有调用equals方法
//  @Override
//  public int hashCode() {
//      // TODO Auto-generated method stub
//      return this.age;
//  }
}
public class Worker extends Person implements Comparable<Worker>{

    public Worker() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Worker(String name, int age) {
        super(name, age);
        // TODO Auto-generated constructor stub
    }
    //实现接口中的唯一方法
    /*
     * 返回0时  set中只有一个元素
     * 1(正数)  按存进去的顺序正序打印
     * -1(负数) 按存进去的顺序倒序打印
     * 
     * TreeSet 按二叉树保存
     * 要保存的数比我小 放在我左边(返回负数)
     * 要保存的数比我大 放在我右边(返回正数)
     * 要保存的数一样大 不保存
     * 打印按从小到大打(正序)
     * 
     * 使用TreeSet排序的步骤
     * 1.让TreeSet集合中保存的对象 实现Comparable接口
     * 2.实现compareTo方法
     * 3.在compareTo方法中 实现 你要排序的规则
     */
    //按年龄排序
//  @Override
//  public int compareTo(Worker o) {
//      // TODO Auto-generated method stub
//      return this.getAge()-o.getAge();
//  }
//  
    //比较的主要条件 按年龄
    //     次要条件 按姓名
//  @Override
//  public int compareTo(Worker o) {
//      // TODO Auto-generated method stub
//      if (this.getAge()-o.getAge()!=0) {
//          return this.getAge()-o.getAge();
//      } else {
//          return this.getName().compareTo(o.getName());
//      }
//      //三目运算符版本
//      return this.getAge()-o.getAge()!=0 ?this.getAge()-o.getAge():this.getName().compareTo(o.getName());
//  }
    @Override
    //先比字符串长度 再比年龄 再比字符串
    public int compareTo(Worker o) {
        // TODO Auto-generated method stub
        return this.getName().length()-o.getName().length()!=0?this.getName().length()-o.getName().length():this.getAge()-o.getAge()!=0 ?this.getAge()-o.getAge():this.getName().compareTo(o.getName());
    }
}

应用:


/*
 * Set(接口)
 * 无序(无下标) 不重复
 */
public class Demo01 {
    public static void main(String[] args) {
        //fun1();
        //fun2();
        //fun3();
        //fun4();
        //fun5();
        //利用set集合 去除ArrayList集合中的重复元素 a a b b c c d d
        ArrayList<String> list =new ArrayList<>();
        list.add("a");
        list.add("a");
        list.add("b");
        list.add("b");
        list.add("c");
        list.add("c");
        list.add("d");
        list.add("d");
        LinkedHashSet<String> set=new LinkedHashSet<>();
        set.addAll(list);
        list.clear();
        list.addAll(set);
        System.out.println(list);
    }
    /**
     * 
     */
    public static void fun5() {
        //输入一个字符串 去掉其中重复字符 wlznbwlznb-->wlznb
        String string="wlznbwlznb";
        char[] charArray = string.toCharArray();
        LinkedHashSet<Character> set=new LinkedHashSet<>();
        for (char c : charArray) {
            set.add(c);
        }
        System.out.println(set);
    }
    /**
     * //  编写一个程序,获取10个1至20的随机数,要求随机数不能重复
     */
    public static void fun4() {
        HashSet<Integer> set=new HashSet<>();
        for (int i = 0; i < 10; i++) {
            int rand = rand(1, 20);
            boolean add = set.add(rand);
            if (add==false) {
                i--;
            }
        }
        System.out.println(set);
    }
    public static int rand(int i, int j) {
        int num;
        int min = i, max = j;
        num = min + (int) (Math.random() * (max - min + 1));
        return num;
    }
    /**
     * 
     */
    public static void fun3() {
        //LinkedHashSet是HashSet的一个子类
        //特点:有序 怎么存的就能怎么取出
        LinkedHashSet<String> set =new LinkedHashSet<>();
        set.add("w");
        set.add("a");
        set.add("n");
        set.add("g");
        System.out.println(set);
    }

    /**
     * 
     */
    public static void fun2() {
        //创建一个hashSet 添加6个人 两两一样
        HashSet<Person> set=new HashSet<>();
        set.add(new Person("鹏鹏",17));
        set.add(new Person("鹏鹏",17));
        set.add(new Person("水水",18));
        set.add(new Person("水水",18));
        set.add(new Person("茜茜",19));
        set.add(new Person("茜茜",19));
        //遍历set集合 查看去重效果
        Iterator<Person> iterator = set.iterator();
        while (iterator.hasNext()) {
            Person person = (Person) iterator.next();
            System.out.println(person);
        }
    }

    /**
     * 添加字符串的
     */
    public static void fun1() {
        //使用HashSet主要用来去重
        //创建一个HashSet
        HashSet<String>hashSet=new HashSet<>();
        //添加d d看看效果
        hashSet.add("d");
        hashSet.add("d");
        hashSet.add("a");
        hashSet.add("b");
        hashSet.add("c");
        System.out.println(hashSet);
    }
}

public class Demo02_2 {
    public static void main(String[] args) {
        // fun1();
        //fun2();
    }

    /**
     *  程序启动后, 可以从键盘输入接收多个整数, 直到输入quit时结束输入. 
     *  把所有输入的整数倒序排列打印.
     */
    public static void fun2() {
        Scanner sc = new Scanner(System.in);
        String nextLine = "";
        TreeSet<Integer> set = new TreeSet<>(new DaoXu());
        while (true) {
            nextLine = sc.nextLine();
            if (nextLine.equals("quit")) {
                break;
            }
            int zs = Integer.parseInt(nextLine);
            set.add(zs);
        }
        System.out.println(set);
        sc.close();
    }

    /**
     * 键盘接受一个字符串,程序对其中所有字符进行排序 要求保留重复的
     */
    public static void fun1() {
        Scanner sc = new Scanner(System.in);
        String nextLine = sc.nextLine();
        char[] array = nextLine.toCharArray();
        TreeSet<Character> set = new TreeSet<>(new CharLengthCompareImpl());
        for (char c : array) {
            set.add(c);
        }
        System.out.println(set);
        sc.close();
    }
}

// 倒叙输出的规则
class DaoXu implements Comparator<Integer> {
    @Override
    public int compare(Integer o1, Integer o2) {
        // TODO Auto-generated method stub
        return o2 - o1;
    }
}

// 保留字符串的规则
class CharLengthCompareImpl implements Comparator<Character> {
    @Override
    public int compare(Character o1, Character o2) {
        // TODO Auto-generated method stub
        if (o1 - o2 == 0) {
            return 1;
        }
        return o1 - o2;
    }
}

import java.util.Comparator;
import java.util.TreeSet;
class StringLengthCompareImpl implements Comparator<String>{
    //主要比 字符串长度
    //次要比 比较字符串
//  @Override
//  public int compare(String o1, String o2) {
//      // TODO Auto-generated method stub
//      return o1.length()-o2.length()!=0 ?o1.length()-o2.length():o1.compareTo(o2);
//  }
    //保留重复
    @Override
    public int compare(String o1, String o2) {
        // TODO Auto-generated method stub
        int num =o1.length()-o2.length()!=0 ?o1.length()-o2.length():o1.compareTo(o2);
        return num!=0?num:1;
    }
}
public class Demo02 {
    public static void main(String[] args) {
        //fun1();
        //fun2();

        //使用比较器来排序的步骤
        //1创建一个比较器类 实现Comparator接口
        //2实现接口中的方法并编写比较规则
        //3把该类的对象传入TreeSet的集合中
        TreeSet<String> set =new TreeSet<>(new StringLengthCompareImpl()
                );
        set.add("asd");
        set.add("asdge");
        set.add("asdef");
        set.add("z");
        set.add("z");
        set.add("as");
        //按字符串长度排序
        System.out.println(set);
    }

    /**
     *  //创建TreeSet集合 保存4个工人
        //系统给你留了接口Comparable 如果你想通过TreeSet来排序
        //你就实现这个接口 编写排序的规则 系统就会按规则来排序
     */
    public static void fun2() {
        TreeSet<Worker> set =new TreeSet<>();
        set.add(new Worker("张三",13));
        set.add(new Worker("李四",13));
        set.add(new Worker("王五",45));
        set.add(new Worker("赵六",27));
        for (Worker worker : set) {
            System.out.println(worker);
        }
    }

    /**
     * 
     */
    public static void fun1() {
        //创建一个TreeSet
        TreeSet<Integer> set =new TreeSet<>();
        set.add(1);
        set.add(3);
        set.add(4);
        set.add(6);
        set.add(7);
        for (Integer integer : set) {
            System.out.println(integer);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与国已互相成为双方最大的交易伙伴。国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占国外贸总值的15.4%。在过去20余年,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com
完整:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值