冒泡排序ArrayList

时间:2014-04-26 11:53:46

标签: java arraylist

我有一个ArrayList,里面有几个简单的用户对象,其中包含ID,名称和密码等信息:

user1 = new User(19, "bsmith", "password");
user2 = new User(15, "jbrown", "password");
user3 = new User(23, "sgreen", "password");

userArray.add(person1);
userArray.add(person2);
userArray.add(person3);

我正在尝试使用我发现的冒泡排序方法按用户ID对它们进行排序:

public static void BubbleSort( int [ ] num )
{
 int j;
 boolean flag = true;   
 int temp;   

 while ( flag )
 {
        flag= false;    
        for( j=0;  j < num.length -1;  j++ )
        {
               if ( num[ j ] > num[j+1] )   
               {
                       temp = num[ j ];                
                       num[ j ] = num[ j+1 ];
                       num[ j+1 ] = temp;
                      flag = true;              
              }
        }
  }
} 

我根本不知道如何在我的ArrayList上实际使用它。我设法让它对常规数组进行排序:

int j[] = {10,30,20,50};

People p = new People();

p.BubbleSort(j);

for (int i = 0; i < j.length; i++) {
    System.out.println(j[i]);
}

我的问题:是否可以直接在我的ArrayList中的每个用户的ID上使用冒泡排序,或者我是否必须以某种方式将每个用户的ID放入另一个数组并对其使用冒泡排序方法?

3 个答案:

答案 0 :(得分:0)

您找到的方法只能用于arrays个int值:int[],您所拥有的ArrayList User个对象:{{1 }}。因此,您需要对其进行一些更改才能将其用于ArrayList。

首先签名,改变

ArrayList<User>

public static void BubbleSort( int [ ] num )

然后,为了访问单个元素,您无法使用索引运算符,您需要使用ArrayList的getset方法。

Sin方法是静态的,你不必创建一个实例来调用它,只需使用类名:

public static void BubbleSort( ArrayList<User> userList )

最后请注意,最好使用接口来声明数据类型。因此,对于ArrayList,您可以使用List接口行,以便:

People.BubbleSort( userArray );

List<User> userArray = new ArrayList<>();

另外请考虑Java naming convention方法和变量,它们应始终以小写字母开头。

public static void BubbleSort( List<User> userList )

答案 1 :(得分:0)

这是一个如何更改方法以对整数ArrayList进行排序

的示例
public static void BubbleSort( ArrayList<Integer> num )
{
    int j;
    boolean flag = true;
    int temp;

    while ( flag )
    {
        flag= false;
        for( j=0;  j < num.size() - 1;  j++ )
        {
            if ( num.get(j) > num.get(j+1) )
            {
                temp = num.get(j);
                num.set(j, num.get(j+1));
                num.set(j + 1, temp);
                flag = true;
            }
        }
    }
}

现在您只需将其更改为user.age进行比较,例如

if ( num.get(j).getAge() > num.get(j+1).getAge() )

不确定User class的接口是什么

答案 2 :(得分:0)

我建议你在用户类中创建一个getID()方法,该方法返回String ID。

private String id;
public String getID() {
    return id;
}

然后只需调用getID并通过对字符串

进行排序来对用户进行排序