【问题标题】:Sort Photo ArrayList alphabetically based on Photo attributes根据照片属性按字母顺序对照片 ArrayList 进行排序
【发布时间】:2014-04-10 02:14:28
【问题描述】:

我已经搜索了该网站,找到了很多资源,但没有一个能回答这个问题。考虑在否决投票或标记为重复之前阅读。

我无法使用比较器接口或.sort()

我有一个名为“photoAlbum”的 Photo 对象的 ArrayList,例如 ArrayList<Photo> photoAlbum = new ArrayList<Photo>();,其中每个 Photo 对象都包含一个名为 photographerName 的字符串属性。我需要使用photographerName 属性按字母顺序对照片对象进行排序。我知道我可以使用冒泡排序或交换排序,但是如何根据每张照片 photographerName 属性对 photoAlbum ArrayList 中的照片对象本身进行排序?

只是提示或通用示例将不胜感激。

PS 我不允许使用Comparator 接口或.sort 方法。

【问题讨论】:

  • 您自己尝试搜索重复项的努力程度如何?我相信这是stackoverflow.com/questions/1206073/… 的副本,是的,我确实阅读了您的问题和那个问题。
  • 我不允许实现比较器接口。
  • 不是你的错,但我对教授布置作业,然后禁止学生以正确的方式做作业感到绝望。
  • 他们希望我们了解使用排序算法的基础知识。不过我同意..为什么这总是发生在我身上..请删除重复标记,以便人们真正查看我的问题。请。
  • 我想这就是学习计算机编程和学习计算机科学之间的区别。我在 1990 年得到了我的第一份编程工作,我不了解排序算法的基础知识。您可能使用的每种编程语言都有一些相当于 Collections.sort 的语言,并且仅在非常有限的一组应用程序中使用它是错误的。

标签: java sorting arraylist


【解决方案1】:

你可以创建一个方法

public static comparePhotos(Photo a, Photo b) {
    return a.photographerName.compareTo(b.photographerName);
}

然后在您想要比较照片的排序算法中的任何位置:

而不是这样做:

if(photo1 < photo2) //this wouldn't work

你会的:

if(comparePhotos(photo1, photo2) < 1)
如果photo1.photographerName 小于photo2.photographerName

comparePhotos 将返回 negative,如果它们相等,则返回 0,以及 正如果photo1.photographerName大于photo2.photographerName

【讨论】:

  • 哈哈。如何在没有 Comparator 的情况下拥有 Comparator。 +1 让我微笑。
【解决方案2】:

试试这个:

Collections.sort(your array list object, new comparator());

public class CustomComparator implements Comparator<Your Array List> {
        @Override
        public int compare(ClassObj o1, ClassObj o2) {
            return String.valueOf(o1.getName()).compareTo(String.valueOf(o2.getName()));
        }
    }

或者试试这个逻辑:

  import java.util.*;

    public class BubbleSort {

   public static void main(String[] args) {
    String l[]={"ABCD" , "XYZ" , "DEF" , "PQR"};
    BubbleSort(l);
    for(int i=0; i<l.length; i++)
    {
        System.out.println(l[i]);
    }
  }

 private static void BubbleSort(String[] array) {
    String t;
    for(int i=0; i<array.length; i++) {
        for(int j=0; j<array.length-1-i; j++) {
        if(array[j].compareTo(array[j+1])>0) {
            t= array[j];
            array[j] = array[j+1];
            array[j+1] = t;
        }
    }
    }
}
   }

【讨论】:

  • 咳嗽:比较器
  • 我正在寻找实际的排序算法,我不能使用.sort()。这是针对大学课程的。
  • 检查编辑的答案传递你的arraylist对象代替array。
【解决方案3】:

有两种可能:

  1. Photo 类将实现Comparable 接口,您将在Photo 类中实现compareTo 方法。那么你只需拨打Collections.sort(photoAlbum);

  2. 您将实现自己的Comparator 并调用Collections.sort(photoAlbum, comparator);。这样就不需要修改Photo类了。

编辑:如果你不能使用它,只需实现你最喜欢的排序算法。或者看看排序函数的 Java 实现。

【讨论】:

    猜你喜欢
    • 2017-05-22
    • 1970-01-01
    • 2019-02-03
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 2013-10-28
    • 2019-05-29
    相关资源
    最近更新 更多