【问题标题】:What is the most efficient way to get a subset of items in a Java Object?在 Java 对象中获取项目子集的最有效方法是什么?
【发布时间】:2016-12-25 06:32:40
【问题描述】:

我有以下课程;

public class RSSFeed implements Serializable {

    private static final long serialVersionUID = 1L;
    private int _itemcount = 0;
    private List<RSSItem> _itemlist;

    RSSFeed() {
        _itemlist = new Vector<RSSItem>(0);
    }

    void addItem(RSSItem item) {
        _itemlist.add(item);
        _itemcount++;
    }
    public void removeItem(RSSItem item) {
        _itemlist.remove(item);
        _itemcount--;
    }
    public void shuffleList() {
        Collections.shuffle(_itemlist);
    }
    public RSSItem getItem(int location) {
        return _itemlist.get(location);
    }

    public int getItemCount() {
        return _itemcount;
    }
    public void reverseList(){Collections.reverse(_itemlist);};

}

我可以如下创建这个类的对象;

public static RSSFeed feed;

现在,我想要另一个对象,例如 public static RSSFeed **feed1**;其中 feed1 包含大对象 feed 的第 3 到 20 项。我该怎么做?

谢谢

【问题讨论】:

  • 仅供参考,如果您真的关心效率,请使用 ArrayList 而不是 Vector。
  • 好的,怎么做?

标签: java android class object


【解决方案1】:

如果您需要List 中的前三个,您可以迭代List _itemlist 并创建一个临时List 并返回临时列表。

public List<RSSItem> getTopThree() {
    if(_itemlist != null){
        List<RSSItem> temp = new ArrayList<RSSItem>();
        for (RSSItem item : _itemlist) {
            temp.add(item);
            if(temp.size() == 3)
                break;
        }
        return temp;
    }
    return null;
}

一种优化是预先创建项目并将其存储为RSSFeed 类中的一个字段。

根据@MouseEvents的建议,你也可以使用ArrayListsublist方法。请参阅下面的代码。

public List<RSSItem> getTopThree() {
    if (_itemlist != null) {
        int end = _itemlist.size() < 3 ? _itemlist.size() : 3;
        return _itemlist.subList(0, end);
    }
    return null;
}

【讨论】:

  • 我宁愿使用 sublist()。
  • @MouseEvent 好建议!实际上并不知道这种方法。非常感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多