首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java集合问题

Java集合问题
EN

Stack Overflow用户
提问于 2016-10-20 21:23:17
回答 2查看 76关注 0票数 0

好的,我有个小的实验室测试,这个题目对我来说很难。我设法从一个已经学过它的人那里得到了一个例子,但我在解决这个问题时遇到了问题。主题如下:

创建类单元(int nr,String定向),并拥有一个类LuxuryApartment,它继承了类单元,并具有一个类型为Float的属性面。

我想这很简单,这里没有问题。

创建类MyLinkedList,它扩展类LinkedList,以便在其中存储单元类型对象。添加一个名为sortByOrientation()的方法,它将使用定义为普通内部类的比较器,按其方向按字母顺序对公寓进行排序。

这是我遇到麻烦的地方。我可以创建类MyLinkedList,但是我不明白sortByOrientation()方法应该是什么样子。

创建一个初始化MyLinkedList的测试程序。增加3套公寓和3 LuxuryApartments。打印列表,使用sortByOrientation()方法对列表进行排序,并使用迭代器打印列表。

如果他们之前说我应该上LuxuryApartments,所以我只能存储公寓,那么我如何将MyLinkedList添加到一个MyLinkedList中呢?

把不豪华的公寓搬到LinkedList,把豪华的搬到LinkedList。创建一个列出公寓和豪华公寓的方法。

我想这并不难,但他们所说的搬家是什么意思?我要从上面提到的MyLinkedList拿走我的公寓吗?

有人能给我一些关于这个练习的建议吗?我真的迷路了。对不起,如果我的问题很愚蠢/不尊重指导方针/等等,但我真的没有办法让这个练习进行下去。

公寓类-我不确定它是否需要实现可比较的接口,就像我说的,我现在对Java很差

代码语言:javascript
复制
public class Apartament implements Comparable<Apartament>{
    private int nr;
    private String orientare;
    public int getNr() {
        return nr;
    }
    public void setNr(int nr) {
        this.nr = nr;
    }
    public String getOrientare() {
        return orientare;
    }
    public void setOrientare(String orientare) {
        this.orientare = orientare;
    }

    public Apartament(int nr, String orientare){
        this.nr=nr;
        this.orientare=orientare;
    }
    public int compareTo(Apartament ap){
        return ap.orientare.compareTo(this.orientare);
    }
}

我的LuxuryApartment类,它继承了我的公寓类

代码语言:javascript
复制
public class ApartamentLux extends Apartament{
    private float suprafata;

    public float getSuprafata() {
        return suprafata;
    }

    public void setSuprafata(float suprafata) {
        this.suprafata = suprafata;
    }

    public ApartamentLux(int n, String o, float suprafata){
        super(n,o);
        this.suprafata=suprafata;
    }
}

这是我真正迷失的地方,似乎无法让它发挥作用。

代码语言:javascript
复制
import java.text.Collator;
import java.util.Comparator;
import java.util.LinkedList;

public class MyLinkedList extends LinkedList<Apartament>{
    public MyLinkedList(){
        super();
    }
    private static class OrComp implements Comparator<String>{
        public int compare(String s1, String s2){
            if(s1.compareTo(s2)<0)
                return 1;
            else return 0;
        }


    public void sortByOrientare(OrComp list){
        list.sort(new Comparator<String>(){
            @Override
            public int compare(String s1, String s2){
                return Collator.getInstance().compare(s1, s2);
            }
        });

        }
    }
}
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-20 21:57:47

对于list类,应该从方法中对列表(this)进行排序。您已经创建了一个额外的比较器,当它应该返回-1时返回0,并尝试对其进行排序。

您不需要实现类似的接口,因为您是这样做的,无论如何,我认为您应该使用this.orientare.compareTo(other.orientare)而不是相反的方式。

但是使用自定义方法和比较器(这似乎是练习所要求的),这里有一个更简单的方法来实现这个功能。

代码语言:javascript
复制
import java.text.Collator;
import java.util.Comparator;
import java.util.LinkedList;

public class MyLinkedList extends LinkedList<Apartament> {
    public void sortByOrientare(){
        sort(new MyComparator());
    }
    class MyComparator extends Comparator<Apartament> {
        @Override
        public int compare(Apartament s1, Apartament s2){
            return Collator.getInstance().compare(s1.getOrientare(), s2.getOrientare());
        }
    }
}

由于ApartamentLux扩展了Apartament,所以可以将它的实例添加到自定义列表中。(因为它们也是阿巴达的例子)

似乎你已经把所有的事情都解决了,除了把名单分开。我猜,但我想他们想要的是这样的东西:

代码语言:javascript
复制
LinkedList<Apartament> list1 = new LinkedList<>();
LinkedList<Apartament> list2 = new LinkedList<>();
for(Apartament a : myList) {
    if(a instanceof ApartamentLux) {
        list2.add(a);
    } else {
        list1.add(a);
    }
}

然后打印出名单。

票数 1
EN

Stack Overflow用户

发布于 2016-10-20 21:32:30

如果他们之前说我应该上LuxuryApartments,所以我只能存储公寓,那么我如何将MyLinkedList添加到一个MyLinkedList中呢?

因为MyLinkedListtype可以存储公寓类型,所以它也可以存储LuxuryApartments,因为它是一个子类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40164805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档