【158天】尚学堂高琪Java300集视频精华笔记(127)

AlgoPioneerMaster
• 阅读 2252

一点小心得

我今天心里其实已经有决断了,后续快速开始执行。

程序员代码境界

  1. what:所有知识,都要知道是什么。

    1. 输入是什么?

    2. 输出是什么?

    3. 有何使用禁忌?

  2. why:20%常用知识,需要了解为什么。

    1. 为何需要输入这些?

    2. 为何输出是这些?(是什么逻辑实现了这样的输出)

    3. 使用禁忌来源于哪里?

  3. how:20%常用知识,需要了解怎么用。

    1. 需要实现什么功能时,要使用这个技术?

跨界

  1. 产品

  2. 营销

  3. 投资

第127集:引用类型_排序容器_TreeSet与TreeMap

  1. ArrayList容器本身是不可以排序的,需要借助工具类Collections.sort方法。

  2. TreeSet是Set接口的实现类,两个特点:数据元素可以排序且不可重复

  3. TreeSet和HashSet的区别:HashSet必须重写hashcode和equals方法,而TreeSet不用,它只要求它装的元素实现排序。(去重:比较等于0即重复)。

  4. 以下两种排序法二选一:

    1. 元素可排序:Comparable+c omaparaTo;

    package test127;
    
    public class Person {
        private final String name;
        private final int handsome;
        
    //    public void setName(String name){
    //        this.name = name;
    //    }
        
        public String getName(){
            return name;
        }
        
    //    public void setHandSome(int handsome){
    //        this.handsome = handsome;
    //    }
        
        public int getHandSome(){
            return handsome;
        }
        
        public Person(){
            name = null;
            handsome = 0;
        }
        
        public Person(String name,int handsome){
            this.name = name;
            this.handsome = handsome;
        }
        
        
        public String toString(){
            return "名称:"+this.name+" 颜值:"+this.handsome+"\n";
        }
        
        
    }
    
    package test127;
    
    import java.util.Comparator;
    import java.util.TreeSet;
    
    public class TestTreeSet {
        
        public static void main(String[] args){
            
            Person a = new Person("zhang",1000);
            Person b = new Person("zhang1",2000);
            Person c = new Person("zhang2",3000);
            Person d = new Person("zhang3",4000);
            Person e = new Person("zhang4",5000);
            Person f = new Person("zhang5",6000);
    
            
            TreeSet<Person> persons = new TreeSet<Person>(
                        new Comparator<Person>(){
                            public int compare(Person o1,Person o2){
                                return -(o1.getHandSome()-o2.getHandSome());
                            }    
                        }
                    
                    );
            
            persons.add(a);
            // TreeSet在添加数据时就完成了数据排序
            persons.add(b);
            persons.add(c);
            persons.add(d);
            persons.add(e);
            persons.add(f);
            
            System.out.println(persons);    
            //d.setHandSome(-1000);//这里一改值就会出问题,扰乱排序
            //e.setHandSome(6000);//也可能导致重复
            //杜绝的方法就是用final
            
            System.out.println(persons);
    
        
            
            
        }
    }
    1. 排序业务类:Comparator+compare

    package test127;
    
    public class Worker implements Comparable<Worker> {
        
        private String type;
        private int salary;
        
        public String getType() {
            return type;
        }
        public void setType(String type) {
            this.type = type;
        }
        public int getSalary() {
            return salary;
        }
        public void setSalary(int salary) {
            this.salary = salary;
        }
        
        public Worker(String type, int salary) {
            super();
            this.type = type;
            this.salary = salary;
        }
        public Worker() {
            
        }
        
        public int compareTo(Worker anotherWorker){
            return this.getSalary() - anotherWorker.getSalary();
        }
        
        public String toString(){
            return "名称:"+this.getType()+" 工资:"+this.getSalary();
        }
        
    }
    
    package test127;
    
    import java.util.TreeSet;
    
    public class TestTreeSet2 {
        
        public static void main(String[] args){
            
            Worker a = new Worker("zhang",1000);
            Worker b = new Worker("zhang1",2000);
            Worker c = new Worker("zhang2",3000);
        
    
            
            TreeSet<Worker> Workers = new TreeSet<Worker>();
            
            Workers.add(a);
            // TreeSet在添加数据时就完成了数据排序
            Workers.add(b);
            Workers.add(c);
            
            
            System.out.println(Workers);    
            //d.setHandSome(-1000);//这里一改值就会出问题,扰乱排序
            //e.setHandSome(6000);//也可能导致重复
            //杜绝的方法就是用final
            
            System.out.println(Workers);
    
        
            
            
        }
    }
    
  5. TreeMap

    1. Comparable+comparaTo

    package test127;
    
    import java.util.Comparator;
    import java.util.Set;
    import java.util.TreeMap;
    
    public class TestTreeMap {
        
        public static void main(String[] args){
            
            Person a = new Person("zhang",1000);
            Person b = new Person("zhang1",2000);
            Person c = new Person("zhang2",3000);
            Person d = new Person("zhang3",4000);
            Person e = new Person("zhang4",5000);
            Person f = new Person("zhang5",6000);
    
            
            TreeMap<Person,String> persons = new TreeMap<Person,String>(
                        new Comparator<Person>(){
                            public int compare(Person o1,Person o2){
                                return -(o1.getHandSome()-o2.getHandSome());
                            }    
                        }
                    );
            
            persons.put(a,"bj");
            persons.put(b,"bj");
            persons.put(c,"bj");
            persons.put(d,"bj");
            persons.put(e,"bj");
            persons.put(f,"bj");
            
            Set<Person> myPersons = persons.keySet();
            
            System.out.println(persons);    
            
        }
    }
    
    1. Comparator+compare

    package test127;
    
    import java.util.TreeMap;
    
    public class TestTreeMap2 {
        
        public static void main(String[] args){
            
            Worker a = new Worker("zhang",1000);
            Worker b = new Worker("zhang1",2000);
            Worker c = new Worker("zhang2",3000);
                
            TreeMap<Worker,String> Workers = new TreeMap<Worker,String>();
            Workers.put(a,"1");
            // TreeSet在添加数据时就完成了数据排序
            Workers.put(b,"1");
            Workers.put(c,"1");
            
            
            System.out.println(Workers.keySet());
        }
    }
    
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
想天浏览器 想天浏览器
2年前
想天浏览器:简单上手,一款可以满足你个性化需求的浏览器
不知道大家使用的是什么浏览器,是大厂研发的QQ浏览器、UC还是Chrome浏览器,有或者是系统自带的浏览器。这些浏览器虽然都是互联网的连接工具,但是它们之间也都有自己的一些优势和特点,不管使用的是什么浏览器,好用的适合自己的才是硬道理。小编今天
Stella981 Stella981
3年前
PHP代码静态分析工具PHPStan
<blockquote最近发现自己写的PHP代码运行结果总跟自己预想的不一样,排查时发现大多是语法错误,在运行之前错误已经种下。可能是自己粗心大意,或者说<codephpl</code检测太简单,不过的确是有一些语法错误埋藏得太深(毕竟PHP是动态语言),那么有没有办法,在代码代码正式运行之前,把语法错误全找出来呢?</blockquote<p
Stella981 Stella981
3年前
Exceptionless
<divid"cnblogs\_post\_body"class"blogpostbodycnblogsmarkdown"<h1id"exceptionless.netcore开源日志框架"Exceptionless.NetCore开源日志框架</h1<blockquote<p作者:markjiang7m2<b
Stella981 Stella981
3年前
DBeaver笔记
<divclass"markdown\_views"<p公司使用的是PostgreSQL数据库,可以使用pgAdmin或者DBeaver进行连接该数据库。个人更喜欢用DBeaver,因为其界面更加美观,操作也相对简单。对于习惯了eclipse的开发者来说,DBeaver绝对是个不错的选择。</p<blockquote<pDBeaver
Wesley13 Wesley13
3年前
mysql用户
1\.学会能按着需求创建一个帐号2\.知道连接字符串是什么样3\.密码密码怎么恢复mysql用户权限介绍mysql用户管理 !(https://oscimg.oschina.net/oscnet/368d3c1e00a0a9515545c2962660a27a080.png)!(https://oscimg.oschin
Wesley13 Wesley13
3年前
A、B、C、D……P站都是什么?
如果说到二次元,你会先想到哪个,B站?B站确实是现在比较出名的二次元网站,但是跟B站类似的二次元网站也是很多的,能排成一个字母表了,今天我们就来揭秘一下除B站外的其他站!!(https://oscimg.oschina.net/oscnet/0886adb05f064833ae1d1603f66ff02
Stella981 Stella981
3年前
RabbitMQ发布订阅实战
RabbitMQ是一款使用Erlang开发的开源消息队列。本文假设读者对RabbitMQ是什么已经有了基本的了解,如果你还不知道它是什么以及可以用来做什么,建议先从官网的RabbitMQTutorials(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.rabbitmq.com
Wesley13 Wesley13
3年前
PHP算法之判断是否是质数
<h3质数的定义</h3<blockquote质数又称素数。一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数;否则称为合数。</blockquote<h3实现思路</h3<p循环所有可能的备选数字,然后和中间数以下且大于等于2的整数进行整除比较,如果能够被整数,则肯定不是质数,相反,就是质数。</p<h3第一种算