如何在Java中访问对象数组中的数据?

时间:2018-11-29 15:41:36

标签: java data-structures

我创建了一个优先级队列,其中包含具有某些属性(id,title,likes)的歌曲。  我想以类似此示例的格式逐元素打印堆:

5 ZZ TOP - La Grange 4167

而是打印以下内容:

[null, Song@330bedb4, Song@2503dbd3, Song@4b67cf4d, Song@7ea987ac... ]

这是我的代码:

 public class PriorityQueue<T> {
    private T[] heap;
    private int size;
    protected Comparator<T> cmp;

    public PriorityQueue(int capacity, Comparator<T> cmp){
        if(capacity < 1) throw new IllegalArgumentException();
        this.heap = (T[]) new Object[capacity + 1];
        this.size = 0;
        this.cmp = cmp;
    }

    public void print(T[] heap) {
        for (int i=1; i<=size; i++){
            System.out.print(heap[i]);
        }
        System.out.println();
    }

    public void insert ( T ob){
        if(ob == null) throw new IllegalArgumentException();
        if(size == heap.length - 1)throw new IllegalArgumentException();
        heap[++size] = ob;
        swim(size);
    }
}

在我的主机上的某个地方:(我将值放在这些变量中)

Song s = new Song(id, title, likes);
System.out.println(s.getId() + " " + s.getLikes() + " " + s.getTitle());
pq.insert(s);
pq.print();

3 个答案:

答案 0 :(得分:0)

在类Song中添加方法:

@Override
public String toString() {
    return getId() + " " + getLikes() + " " + getTitle();
}

答案 1 :(得分:0)

致电时:

System.out.print(heap[i]);

输出的是对象的toString()方法的结果。您的对象不会覆盖toString方法,因此您看到的是Object类中toString方法的结果。

答案 2 :(得分:0)

您尚未在歌曲类中实现toString方法。

public class Song {

    @Override
    public String toString() {
        return s.getId() + " " + s.getLikes() + " " + s.getTitle();
    }

}