设计数据结构/ Java数据结构

时间:2014-10-07 14:13:10

标签: java oop optimization data-structures

我对如何选择数据结构感到困惑。假设我有以下数据 产品,价格,公司,总可用..我从db获得。现在我想代表这个代表excel或csv与我从db公司明智地获得的顺序。 所以我选择下面的数据结构。

Map<String, TreeMap<Integer, TreeMap<String, String>>> .

First String代表公司  整数表示db中记录的位置,以便我可以以相同的顺序显示。 TreeMap包含其他值。

我可以为此要求选择任何更好的数据结构。

3 个答案:

答案 0 :(得分:3)

是的,绝对。

更好的解决方案是面向对象的:

public class Product {
    private String name;
    private String company;
    private Money total;
    private boolean available;
    // Add necessary methods.
}

数据结构为List<Product>

你的方式太原始了。

答案 1 :(得分:1)

传统的数据结构遵循结构化编程范例。面向对象编程源于结构化编程,但增加了行为局部性的概念。简而言之,数据不仅仅是集中的,而且数据的行为(方法)也是集中的。

这允许数据隐藏(对于维护很有用,因为正确的数据格式会随着时间的推移而发生变化),并为其他更高级的行为打开了大门(由于行为是本地化的,因此可能存在多态性)。但是,它对纯粹的数据结构方法没有太大作用。我们与旧学校数据结构最接近的是代表它们的对象。

在选择数据结构时,如果您真的不知道什么是重要的,那么您实际上并不具备允许您选择一种数据结构而非另一种数据结构的标准。当然,你可以随时使用HashMapHashSet,这很好很多时候;但是,有一些简单的例子,这些选择可能是最糟糕的选择。简而言之,您需要知道访问模式才能做出正确的选择。

答案 2 :(得分:0)

正如duffymo所说,你应该考虑采用oop方法。考虑使用类似以下示例的内容:

import java.util.ArrayList;

public class Product {

    private String name;
    private double price;
    private String company;
    private int total;
    private boolean available;

    public Product(String name, double price, String company, int total,
            boolean available) {
        super();
        this.name = name;
        this.price = price;
        this.company = company;
        this.total = total;
        this.available = available;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }

    public boolean isAvailable() {
        return available;
    }

    public void setAvailable(boolean available) {
        this.available = available;
    }

    @Override
    public String toString() {
        return "Product [name=" + name + ", price=" + price + ", company="
                + company + ", total=" + total + ", available=" + available
                + "]";
    }

    public static void main(String[] args) {
        ArrayList<Product> products = new ArrayList<Product>();

        Product product1 = new Product("PlayStation 4", 300, "Sony", 10, true);
        Product product2 = new Product("XBOX One", 400, "Microsoft", 0, false);
        Product product3 = new Product("WiiU", 250, "Nintendo", 5, true);

        products.add(product1);
        products.add(product2);
        products.add(product3);

        System.out.println("-- Products --");
        for (Product product : products) {
            System.out.println(product.toString());
        }
    }
}

它将产生以下输出:

-- Products --
Product [name=PlayStation 4, price=300.0, company=Sony, total=10, available=true]
Product [name=XBOX One, price=400.0, company=Microsoft, total=0, available=false]
Product [name=WiiU, price=250.0, company=Nintendo, total=5, available=true]

如您所见,您将能够轻松管理项目列表。

希望它有所帮助。

Clemencio Morales Lucas。