黑马程序员技术交流社区

标题: 集合框架(TreeSet存储自定义对象)中的问题? [打印本页]

作者: 庄生晓梦    时间: 2012-12-10 17:02
标题: 集合框架(TreeSet存储自定义对象)中的问题?
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存储自定义对象)
作者: super_Xiong    时间: 2012-12-10 22:39
应该是这个样子,第一个参数进去的时候Object obj传的是“lisi02”
而这个时候的s和this都是指向这一个对象的。


作者: 庄生晓梦    时间: 2012-12-11 16:05
应该如何改进才可以如视频中一样;去除lisi02....compareTo....lisi02 呢????
作者: 庄生晓梦    时间: 2012-12-13 14:36
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();
        }
}
这是我根据视频中的题改的????可以实现死锁问题了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2