【问题标题】:Java:Sorting an arraylist having linkedlist with the first elementJava:对具有链表和第一个元素的数组列表进行排序
【发布时间】:2018-04-07 22:59:42
【问题描述】:

考虑这个带有linkedlist对象的arraylist (are->1->3->7 , croco-> 4 ->1 , bat ->3->8)。
现在我必须考虑到arraylist中包含的linkedlist的第一个元素,按升序对java中的arraylist进行排序。 有一个方法 Collections.sort() 但当对象是字符串时它很有用。 在这种情况下应用什么? 最终列表应如下所示 (are->1->3->7 , bat ->3->8 , croco-> 4 ->1 )

【问题讨论】:

    标签: java arraylist linked-list


    【解决方案1】:

    Collections.sort(); 有一个重载方法,它也接受一个比较器。所以你想要这样的东西:

    Collections.sort(lists, (o1, o2) ->
            o1.get(0).compareTo(o2.get(0))
    );
    

    或者如果你可以使用Java 8,在List接口中有一个默认的sort方法:

    lists.sort(Comparator.comparing(o -> o.get(0)));
    

    【讨论】:

    • 由于我的arraylist标识符是arr,所以我使用的是你上面所说的arr.sort(Comparator.comparing(o -> o.get(0)));但它显示错误找不到符号get()
    • 你的数据列表是列表吗?
    • 是一个ArrayList里面的链表,ArrayList arr = new ArrayList()
    • 你的LinkedList有获取第一个元素的方法吗?
    • 是 arr.get(j).getFirst() 其中 j 是 arraylist 的索引,但我们应该在 for 循环中。
    【解决方案2】:

    没有太多上下文,我可能错了。但是,根据我的判断,如果您使用自己的包含标识符(are、croco 和 bat)和linkedlist(数字)的对象,那么您可以使用以下解决方案。

    你的类需要实现 Comparable 接口 您需要覆盖 compareTo() 方法 Collections.sort() 应该按升序对对象进行排序。

    public class Example implements Comparable {
        private String identifier;
        private List<Integer> list;
    
        // constructors
        // getters
    
        @Override
        public int compareTo(Object other){ 
        if(this.list.head() > other.list.head()) return 1; 
        if(this.list.head() < other.list.head()) return -1;
        else return 0;
        }
    }
    

    【讨论】:

    • 我应用了你所说的,但在 other.list 中出现错误,找不到符号,其他类型为 Object。
    • 您的列表需要一个 getter 函数,否则您必须公开您的列表对象。有一个函数: public List getList() { return this.list;然后在 compareTo 函数中,将 other.list.head() 替换为 other.getList().get(0)
    • 公共类倒排索引创建实现 Comparable{ private LinkedList listst; public LinkedList getList(){ return this.listst; } @Override public int compareTo(LinkedList other){ if(this.lisst.getFirst()> other.lisst.getFirst()) return 1; if(this.listst.getFirst()
    • 所以,现在我是这样实现的,public class reverseindexcreate implements Comparable{ private LinkedList listst; public LinkedList getList(){ return this.listst; } public int compareTo(invertedindexcreate other){ return (this.listst.getFirst()).compareTo(other.getList().getFirst());现在,在 main 方法中 compareTo 仍然找不到 Collections.sort(arr, (o1, o2) -> o1.getFirst().compareTo(o2.getFirst()));
    猜你喜欢
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 2020-08-02
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多