A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

import java.util.Iterator;
import java.util.TreeSet;

public class TreeSetDemo {
        public static void main(String[] args)
        {
                TreeSet ts = new TreeSet();
               
                ts.add(new Student("lisi02", 22));
                ts.add(new Student("lisi007", 20));
                ts.add(new Student("lisi09", 19));
                ts.add(new Student("lisi08", 19));
                //ts.add(new Student("lisi01", 40));
               
                Iterator it = ts.iterator();
               
                while(it.hasNext())
                {
                        Student stu = (Student)it.next();
                        System.out.println(stu.getName() + "...." + stu.getAge());
                }
        }
}
class Student implements Comparable//该接口强制让学生具备比较性
{
        private String name;
        private int age;
        Student(String name, int age)
        {
                this.name = name;
                this.age = age;
        }
       
        public int compareTo(Object obj)
        {
                if(!(obj instanceof Student))
                        throw new RuntimeException("不是学生对象");
               
                Student s = (Student)obj;
               
                System.out.println(this.name + "....compareTo...." + s.name);
                if(this.age > s.age)
                        return 1;
                if(this.age == s.age)
                {
                        return this.name.compareTo(s.name);
                }
                return -1;
        }
       
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
}


lisi02....compareTo....lisi02
lisi007....compareTo....lisi02
lisi09....compareTo....lisi02
lisi09....compareTo....lisi007
lisi08....compareTo....lisi007
lisi08....compareTo....lisi09
lisi08....19
lisi09....19
lisi007....20
lisi02....22
为什么会出现lisi02....compareTo....lisi02 ?

黑马程序员_毕向东_Java基础视频教程第15天-02-集合框架(TreeSet存储自定义对象)

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
应该是这个样子,第一个参数进去的时候Object obj传的是“lisi02”
而这个时候的s和this都是指向这一个对象的。

回复 使用道具 举报
应该如何改进才可以如视频中一样;去除lisi02....compareTo....lisi02 呢????
回复 使用道具 举报
class Test2 implements Runnable
{
       
        private boolean flag;
        private ObjectLock ol;
        Object locka = new Object();
        Object lockb = new Object();
       
        Test2(boolean flag, ObjectLock ol)
        {
                this.flag = flag;
                this.ol = ol;
        }
        public void run()
        {
                if(flag)
                {
                        while(true)
                        {
                        synchronized(ol.locka)
                        {
                                System.out.println("if locka");
                                synchronized(ol.lockb)
                                {
                                        System.out.println("if lockb");
                                }
                        }
                        }
                }
                else
                {
                        while(true)
                        {
                        synchronized(ol.lockb)
                        {
                                System.out.println("else lockb");
                                synchronized(ol.locka)
                                {
                                        System.out.println("else locka");
                                }
                        }
                        }
                }
        }
}
/*
class MyLock
{
        static Object locka = new Object();
        static Object lockb = new Object();
       
}
*/
class ObjectLock
{
        Object locka = new Object();
        Object lockb = new Object();
       
}
public class DeadLock {
        public static void main(String[] args)
        {
                ObjectLock ol = new ObjectLock();
                Thread t1 = new Thread(new Test2(true, ol));
                Thread t2 = new Thread(new Test2(false, ol));
                t1.start();
                t2.start();
        }
}
这是我根据视频中的题改的????可以实现死锁问题了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马