Java类对象排序问题---如何对两个类的所有对象进行pai'xu

理强 2017-03-29 10:15:54
设有A、B两个类,其中均含有属性:java.util.Date time;A中含有若干个属性a1...an,B中含有若干个属性b1...bm,
现在有A的若干个实例 A1 A2 A3 ...,B的若干个实例B1 B2 B3...
现在按照time属性进行排序,依次输出A和B的所有实例。
请问下这有什么好的实现方法?
...全文
470 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
理强 2017-03-31
  • 打赏
  • 举报
回复
引用 2楼zs808 的回复:
用自定义Comparator就可以,以下是示例:

public class App {
	static class TestClass{
		private Date date;
		private String time;

		public Date getDate() {
			return date;
		}

		public void setDate(Date date) {
			this.date = date;
		}

		public String getTime() {
			return time;
		}

		public void setTime(String time) {
			this.time = time;
		}

		public TestClass(Date date, String time) {
			super();
			this.date = date;
			this.time = time;
		}
		
	}
	

	public static void main(String[] args) {
		TestClass c1 = new TestClass(new Date(2017, 3, 20), "1");
		TestClass c2 = new TestClass(new Date(2017, 3, 19), "2");
		TestClass c3 = new TestClass(new Date(2017, 3, 21), "3");
		TestClass c4 = new TestClass(new Date(2017, 2, 15), "4");
		
		List<TestClass> list = Arrays.asList(c1,c2,c3,c4);
		
		System.out.println("排序前:");
		for (TestClass testClass : list) {
			System.out.println(testClass.date + ":" + testClass.time);
		}
		//排序
		Collections.sort(list, new Comparator<TestClass>() {
			@Override
			public int compare(TestClass o1, TestClass o2) {
				return o1.getDate().compareTo(o2.getDate()); //按日期排序
			}
		});
		System.out.println("排序后:");
		for (TestClass testClass : list) {
			System.out.println(testClass.date + ":" + testClass.time);
		}
	}
}
谢了~~已经解决了
理强 2017-03-31
  • 打赏
  • 举报
回复
引用 1楼bobolnear 的回复:
很简单啊,重写 基类的compareTo方法,所有类都是继承Object 的,这个你要不是很清楚可以多看看think in java
@Override
    public int compareTo(Field o) {
        // 先按age排序
        if (this.age > o.getAge()) {
            return (this.age - o.getAge());
        }
        if (this.age < o.getAge()) {
            return (this.age - o.getAge());
        }
        // 按name排序
        if (this.name.compareTo(o.getName()) > 0) {
            return 1;
        }
        if (this.name.compareTo(o.getName()) < 0) {
            return -1;
        }
        return 0;
    }
然后使用 compareTo 进行比较排序, 排序算法 可以用冒泡排序法(不懂的话,参看 http://www.cnblogs.com/wuzhenbo/archive/2012/03/30/2423861.html)
嗯嗯,我也实现了类似的一个方法~~谢谢
理强 2017-03-31
  • 打赏
  • 举报
回复
引用 3楼MikeDDT009 的回复:
类排序的原理其实大都是拿其中的某个属性来比较进行排序,就像很多论坛里面的按发布时间,最后回复时间排序,对吧。一个帖子不就是一个类的实例(对象)。用冒泡排序来说,外层循坏排序条件用的数组长度就是对象数组的长度。内循环比较对象.(注意这个点,理解成“的就行了”)某属性,然后对象数组来交换,最后输出的结果其实就是按某属性来排序。总不会见过以对象来排序,一般都是会有限定条件的,比如有大到小,以某属性来排序
嗯嗯,理解了谢谢
zs808 2017-03-29
  • 打赏
  • 举报
回复
用自定义Comparator就可以,以下是示例:

public class App {
	static class TestClass{
		private Date date;
		private String time;

		public Date getDate() {
			return date;
		}

		public void setDate(Date date) {
			this.date = date;
		}

		public String getTime() {
			return time;
		}

		public void setTime(String time) {
			this.time = time;
		}

		public TestClass(Date date, String time) {
			super();
			this.date = date;
			this.time = time;
		}
		
	}
	

	public static void main(String[] args) {
		TestClass c1 = new TestClass(new Date(2017, 3, 20), "1");
		TestClass c2 = new TestClass(new Date(2017, 3, 19), "2");
		TestClass c3 = new TestClass(new Date(2017, 3, 21), "3");
		TestClass c4 = new TestClass(new Date(2017, 2, 15), "4");
		
		List<TestClass> list = Arrays.asList(c1,c2,c3,c4);
		
		System.out.println("排序前:");
		for (TestClass testClass : list) {
			System.out.println(testClass.date + ":" + testClass.time);
		}
		//排序
		Collections.sort(list, new Comparator<TestClass>() {
			@Override
			public int compare(TestClass o1, TestClass o2) {
				return o1.getDate().compareTo(o2.getDate()); //按日期排序
			}
		});
		System.out.println("排序后:");
		for (TestClass testClass : list) {
			System.out.println(testClass.date + ":" + testClass.time);
		}
	}
}
bobolnear 2017-03-29
  • 打赏
  • 举报
回复
很简单啊,重写 基类的compareTo方法,所有类都是继承Object 的,这个你要不是很清楚可以多看看think in java
@Override
    public int compareTo(Field o) {
        // 先按age排序
        if (this.age > o.getAge()) {
            return (this.age - o.getAge());
        }
        if (this.age < o.getAge()) {
            return (this.age - o.getAge());
        }
        // 按name排序
        if (this.name.compareTo(o.getName()) > 0) {
            return 1;
        }
        if (this.name.compareTo(o.getName()) < 0) {
            return -1;
        }
        return 0;
    }
然后使用 compareTo 进行比较排序, 排序算法 可以用冒泡排序法(不懂的话,参看 http://www.cnblogs.com/wuzhenbo/archive/2012/03/30/2423861.html)
MikeDDT009 2017-03-29
  • 打赏
  • 举报
回复
类排序的原理其实大都是拿其中的某个属性来比较进行排序,就像很多论坛里面的按发布时间,最后回复时间排序,对吧。一个帖子不就是一个类的实例(对象)。用冒泡排序来说,外层循坏排序条件用的数组长度就是对象数组的长度。内循环比较对象.(注意这个点,理解成“的就行了”)某属性,然后对象数组来交换,最后输出的结果其实就是按某属性来排序。总不会见过以对象来排序,一般都是会有限定条件的,比如有大到小,以某属性来排序

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧