当前位置: 首页 > 面试题库 >

Java中的持久数据结构

李良策
2023-03-14
问题内容

有没有人知道一个库或至少一些有关在Java中创建和使用持久性数据结构的研究?我不是将持久性称为长期存储,而是将持久性称为不变性(请参阅Wikipedia条目)。

我目前正在探索为持久性结构建模api的不同方法。使用构建器似乎是一个有趣的解决方案:

// create persistent instance
Person p = Builder.create(Person.class)
             .withName("Joe")
             .withAddress(Builder.create(Address.class)
                 .withCity("paris")
                 .build())
              .build();

// change persistent instance, i.e. create a new one 
Person p2 = Builder.update(p).withName("Jack");

Person p3 = Builder.update(p)
              .withAddress(Builder.update(p.address())
                .withCity("Berlin")
                .build)
            .build();

但这仍然感觉有些呆板。有任何想法吗?


问题答案:

我想显而易见的选择是:

o切换到临时数据结构(构建器)进行更新。这是很正常的。StringBuilder用于String操纵例如。举个例子。

Person p3 =
    Builder.update(p)
    .withAddress(
        Builder.update(p.address())
       .withCity("Berlin")
       .build()
    )
    .build();

o始终使用持久性结构。尽管似乎有很多复制,但实际上您应该共享几乎所有状态,因此它远没有看起来那么糟糕。

final Person p3 = p
    .withAddress(
        p.address().withCity("Berlin")
    );

o将数据结构分解为大量变量,并与一个庞大且令人困惑的构造函数重新组合。

final Person p3 = Person.of(
    p.name(),
    Address.of(
       p.house(), p.street(), "Berlin", p.country()
    ),
    p.x(),
    p.y(),
    p.z()
 );

o使用回调接口提供新数据。甚至更多样板。

final Person p3 = Person.of(new PersonInfo(
    public String  name   () { return p.name(); )
    public Address address() { return Address.of(new AddressInfo() {
       private final Address a = p.address();
       public String house  () { return a.house()  ; }
       public String street () { return a.street() ; }
       public String city   () { return "Berlin"   ; }
       public String country() { return a.country(); }
    })),
    public Xxx     x() { return p.x(); }
    public Yyy     y() { return p.y(); }
    public Zzz     z() { return p.z(); }
 });

o使用讨厌的技巧使字段暂时可用于代码。

final Person p3 = new PersonExploder(p) {{
    a = new AddressExploder(a) {{
        city = "Berlin";
    }}.get();
}}.get();

(非常有趣的是,我刚刚放下了Chris Okasaki的“纯功能数据结构”的副本。)



 类似资料:
  • 问题内容: 我有一个利用图(树状)自定义结构的应用程序。这些结构不是真正的树木,但几乎所有事物都连接在一起。数据量也很大(可以存在数百万个节点)。树节点的类型可以不同,以使其更有趣(继承)。我不想更改数据结构以容纳持久性存储。 我想保留这些数据而无需过多的工作。我已经选择了一些解决方案来解决此问题,但找不到任何完全适合我需要的东西。可能的选项:序列化,使用ORM的数据库(Hibernate?),使

  • 为了学习数据的持久化,写一个简单的地址薄合约.虽然这个例子因为各种原因作为生产环境的合约不太实用,但它是一个很好的合约用来学习EOSIO的数据持久化并且不会因为与eosio multi_index不相关的相关业务逻辑分心. Step 1:创建一个新的文件夹 进入之前的目录: cd /Users/zhong/coding/CLion/contracts 为我们的合约创建一个新的目录并进去: mkd

  • 问题内容: 我正在尝试编写一个Java程序,该程序将自动下载并命名一些我最喜欢的网络漫画。由于我将请求来自同一域的多个对象,因此我希望有一个持久的http连接,在下载所有漫画之前,我可以一直保持打开状态。以下是我正在进行的工作。如何在不打开新的http连接的情况下从相同域但路径不同发出另一个请求? 问题答案: 根据此处的文档,HTTP持久性在Java中是透明处理的,尽管它提供了一些选项,也可以通过

  • 作为一个长期的SAS用户,我正在探索切换到python和pandas。 然而,在今天运行一些测试时,我很惊讶python在尝试一个128MB的csv文件时内存耗尽。它大约有200,000行和200列,大部分是数字数据。 使用SAS,我可以将csv文件导入SAS数据集,并且它可以和我的硬盘一样大。 中有类似的内容吗? 我经常处理大文件,没有访问分布式计算网络的权限。

  • 本文向大家介绍内存型数据库Redis持久化小结,包括了内存型数据库Redis持久化小结的使用技巧和注意事项,需要的朋友参考一下 因为Redis是内存型数据库,所以为了防止因为系统崩溃等原因导致数据丢失的问题,Redis提供了两种不同的持久化方法来将数据存储在硬盘里面,一种方法是快照(RDB),它可以将存在于某一个时刻的所有数据都写入到硬盘里面,另外一种方法是只追加文件(AOF),它会在执行写命令时

  • 问题内容: 我正在Java中寻找一个持久的哈希结构,这是一个简单的键值存储,其中key是唯一的字符串,value是一个int。每次将现有密钥添加到存储中时,密钥的值将增加。 我需要它很大-可能有5亿-10亿个密钥。我一直在评估tokyo-cabinet http://fallabs.com/tokyocabinet/javadoc/,但不确定其扩展性如何- 随着哈希值的增加,插入时间似乎越来越长。