java 如何对对象进行排序

/以下是我的源代码。其中还有一个实现了Comparable接口的自定义的Car类未给出,那不影响我的提问*/packagecn.com.csuinfo.Mycollec;... / 以下是我的源代码。其中还有一个实现了Comparable接口的自定义的Car类未给出, 那不影响我的提问*/
package cn.com.csuinfo.Mycollec;

import java.util.Set;
import java.util.TreeSet;

public class TestMySort {

public void BubbleSort(TreeSet<Car> set){

Car c1;
Car c2;
Car c3;
Car c4;
c1=set.pollFirst();//将set中的元素一个个取出来,再存入Car数组中
c2=set.pollFirst();
c3=set.pollFirst();
c4=set.pollFirst();

Car[] iArr={c1,c2,c3,c4}; //数组中存放了Car类型的四个对象
Car tmp=null;
int len=set.size();
for(int i=0;i<len-1;i++){//对数组中的对象按属性值price的大小进行排序
for(int j=0;j<len-1-i;j++){
if(iArr[j].price > iArr[j+1].price) {
tmp = iArr[j];
iArr[j] = iArr[j + 1];
iArr[j + 1]= tmp;
System.out.println("SB");//测试之注意!:程序没执行到此来???
}
}

}
for(Car car: iArr){
System.out.println(car);
}

}

public static void main(String[] args){
TreeSet<Car> set1=new TreeSet<Car>();

Car car1=new Car("Ford",164000);
Car car2=new Car("Honda",286000);
Car car3=new Car("Toyota",410000);
Car car4=new Car("Benz",850000);

set1.add(car1);
set1.add(car2);
set1.add(car3);
set1.add(car4);
System.out.println(”***********************“);

new TestMySort().BubbleSort(set1);

}
}
//我知道在TreeSet中添加实现了Comparable接口的元素时,自动为其进行自然排序。但是我在此处就是想通过对对象进行冒泡排序而达到我自定义的排序规则(不考虑用比较器的情况)。 恳请大家帮帮忙咯, 我已经搞了大半天,上面的程序虽然可以运行我想要的结果, 但是还是用的TreeSet中的 自然排序, 程序都没有执行到冒泡排序法中去??万分感谢!
展开
 我来答
百度网友3b46a7f
2008-12-15 · TA获得超过2520个赞
知道小有建树答主
回答量:735
采纳率:0%
帮助的人:0
展开全部
纠正几点错误:
首先TreeSet就是一个二叉树排序容器,由用户定义对象比较规则,然后接口回调进行排序,也就是说当对象在add到容器后实际上已经按照你定义的排序规则排序完毕了,所以你也没有必要再单独写一个排序方法。
如果你想单独写一个排序算法,传送TreeSet()这样已经排序完毕的容器当然是多此一举的。 你可以用List保存你的对象,这样容器保存的就是原始的对象集合(按add()的先后顺序排序),这样才能真正发挥排序方法的功能.

其次,你的冒泡排序算法是按照价格从小到大的,而你add对象的时候就是从小到大的,所以一直没有满足if(iArr[j].price > iArr[j+1].price) { 这个条件,可以把>号改成<号,或者打乱add的顺序,这样就能看出效果。

另外从容器内取元素应该用循环,而不应该写死。你应该知道,所以程序我也没修改~

下面的程序在原作上面稍微修改了一下,自己可以比较一下区别
package cn.com.csuinfo.Mycollec;

import java.util.ArrayList;
import java.util.List;

public class TestMySort {

public void BubbleSort(List<Car> list) {

Car c1;
Car c2;
Car c3;
Car c4;
c1 = list.get(0);// 将set中的元素一个个取出来,再存入Car数组中
c2 = list.get(1);
c3 = list.get(2);
c4 = list.get(3);

Car[] iArr = { c1, c2, c3, c4 }; // 数组中存放了Car类型的四个对象
Car tmp = null;
int len = list.size();
for (int i = 0; i < len - 1; i++) {// 对数组中的对象按属性值price的大小进行排序
for (int j = 0; j < len - 1 - i; j++) {
if (iArr[j].price < iArr[j + 1].price) {
tmp = iArr[j];
iArr[j] = iArr[j + 1];
iArr[j + 1] = tmp;
System.out.println("change");// 测试之注意!:程序没执行到此来???
}
}
}
for (Car car : iArr) {
System.out.println(car);
}

}

public static void main(String[] args) {
List<Car> list = new ArrayList<Car>();

Car car1 = new Car("Ford", 164000);
Car car2 = new Car("Honda", 286000);
Car car3 = new Car("Toyota", 410000);
Car car4 = new Car("Benz", 850000);

list.add(car1);
list.add(car2);
list.add(car3);
list.add(car4);
System.out.println("***********************“");

new TestMySort().BubbleSort(list);

}
}
百度网友a796c4d
2015-10-22 · TA获得超过298个赞
知道小有建树答主
回答量:317
采纳率:33%
帮助的人:163万
展开全部

这里用到集合的知识了,排序用TreeSet

比如:

     这里我们对一个Person对象进行排序,Person对象里面有两个属性,一个是姓名一个是年龄,我们这里按照年龄升序,如果年龄相同就按照姓名排序;

import java.util.*;
public class Test {
public static void main(String[] args) {
TreeSet<Person> ts = new TreeSet<Person>(new Comparator<Person>(){
public int compare(Person p1, Person p2) {
int num = new Integer(p1.getAge()).compareTo(new Integer(p2.getAge()));
if(num==0){
return p1.getName().compareTo(p2.getName());
}
return num;
}
});
ts.add(new Person("zhangsan",20));
ts.add(new Person("zhangsan",30));
ts.add(new Person("lisi",10));
ts.add(new Person("wangwu",40));
for(Person p:ts){
System.out.println(p.getName()+"::"+p.getAge());
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lzj203355
2008-12-15 · TA获得超过2022个赞
知道小有建树答主
回答量:3147
采纳率:100%
帮助的人:1015万
展开全部
for(int i=0;i<len-1;i++){
for(int j=0;j<len-1-i;j++){
改成:for(int i=0;i<len-1;i++){
for(int j=i+1;j<len;j++){
}
}
试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式