小编dot*_*win的帖子

迭代JsonObject属性

我想JsonObjectGson重复一遍.我的最终目标是获得内部对象ArrayList中所有现有的三位数code整数"unterfeld",但是一旦我可以迭代外部对象的属性,这将是没有问题的.

{
  "something1": {
    "bezeichnung": "something1",
    "unterfeld": [
      {
        "bezeichnung": "bla1",
        "unterregionen": [
        ],
        "code": 111
      },
      {
        "bezeichnung": "bla2",
        "unterregionen": [
        ],
        "code": 222
      }
    ],
    "code": 3
  },
  "something2": {
    "bezeichnung": "something2",
    "unterfeld": [
      {
        "bezeichnung": "bla3",
        "unterregionen": [
        ],
        "code": 333
      }
    ],
    "code": 6
  },
  "something3": {
    "bezeichnung": "something3",
    "unterfeld": [
      {
        "bezeichnung": "bla4",
        "unterregionen": [
        ],
        "code": 444
      },
      {
        "bezeichnung": "bla5",
        "unterregionen": …
Run Code Online (Sandbox Code Playgroud)

java iteration json gson

38
推荐指数
1
解决办法
4万
查看次数

如果对其字段有引用,是否会对元素进行垃圾回收?

即,在

class A {
    public String s;
}
Run Code Online (Sandbox Code Playgroud)

A a1 = new A();
a1.s = "bla";
A a2 = new A();
a2.s = a1.s;
a1 = null;
Run Code Online (Sandbox Code Playgroud)

a1被垃圾收集或是a1.s允许收集它的参考(我宁愿做一个深层复制a2.s = new String(a1.s))?

非常感谢提前!

java garbage-collection

12
推荐指数
1
解决办法
341
查看次数

java.lang.OutOfMemoryError即使很多

我正在尝试将2.5GB的txt文件读入我的应用程序.我正在运行Win7 x64并且有43GB的内存可用(64GB).我尝试使用-Xmx -XX:MaxParmSize -XX:ParmSize等.这些都不会影响错误.我还能尝试什么?这个错误看起来很奇怪,因为我当然有足够的堆空间可用.

Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit
    at java.util.Arrays.copyOf(Unknown Source)
    at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source)
    at java.lang.AbstractStringBuilder.ensureCapacityInternal(Unknown Source)
    at java.lang.AbstractStringBuilder.append(Unknown Source)
    at java.lang.StringBuilder.append(Unknown Source)
    at j.utilities.IO.loadString(IO.java:187)
    at j.utilities.IO.loadString(IO.java:169)
    at city.PreProcess.main(PreProcess.java:78)
Run Code Online (Sandbox Code Playgroud)

我在跑步

java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)
Run Code Online (Sandbox Code Playgroud)

非常感谢提前.

==============答案==============

好的,我只是测试了它

StringBuilder sb = new StringBuilder();
for ( int i=1; i<Integer.MAX_VALUE; i++ )
    sb.append("x");
Run Code Online (Sandbox Code Playgroud)

得到了

Exception in thread "main" java.lang.OutOfMemoryError: Requested array size …
Run Code Online (Sandbox Code Playgroud)

java out-of-memory

7
推荐指数
1
解决办法
2万
查看次数

与Apache Commons Math的标准偏差

我正在使用Apache Commons Math计算向量的SD.问题:我得到的价值不同于手工

DescriptiveStatistics stats = new DescriptiveStatistics();
stats.addValue(value1);
...
stats.addValue(value8);
stats.getStandardDeviation();
Run Code Online (Sandbox Code Playgroud)

例如,取值[1699.0,1819.0,1699.0,1719.0,1689.0,1709.0,1819.0,1689.0].SD应为52.067,但Commons Math = 55.662.

我究竟做错了什么?

java math apache-commons apache-commons-math

6
推荐指数
2
解决办法
6038
查看次数

为什么Spliterators.spliteratorUnknownSize()不是后期绑定?

我今天读了一下spliterators并实现了一个使用Spliterators.spliteratorUnknownSize(iterator(), Spliterator.NONNULL).根据spliteratorUnknownSize()文件

[结果]分裂器不是后期绑定的

作为分裂者的新手,我想知道为什么会这样.如果我确保iterator()后期绑定,那么得到的分裂器也应该是,不是吗? spliteratorUnknownSize()仅仅创建一个IteratorSpliterator不与元素源绑定的东西.

也就是说,我很想理解为什么得到的分裂器没有后期绑定.谢谢.

java late-binding spliterator

6
推荐指数
1
解决办法
206
查看次数

从 SimpleDateFormat 移动到 DateTimeFormatter 时的问题

SimpleDateFormat过去几年我一直在成功使用。我使用它构建了一堆时间实用程序类。

由于我遇到了SimpleDateFormat(SDF) 不是线程安全的问题,因此我在过去几天中将这些实用程序类重构为DateTimeFormatter现在内部使用(DTF)。由于两个班级的时间模式几乎相同,因此这种转变在当时似乎是个好主意。

我现在在获取EpochMillis(自 以来的毫秒数1970-01-01T00:00:00Z)时遇到问题:虽然 SDF 会例如解释10:30使用HH:mmas解析1970-01-01T10:30:00Z,但 DTF 不会做同样的事情。DTF可以使用10:30来解析LocalTime,但不是ZonedDateTime它需要获得EpochMillis

我理解对象java.time遵循不同的哲学;DateTimeZoned对象分开保存。但是,为了让我的实用程序类像以前一样解释所有字符串,我需要能够为所有丢失的对象动态定义默认解析。我试着用

DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
builder.parseDefaulting(ChronoField.YEAR, 1970);
builder.parseDefaulting(ChronoField.MONTH_OF_YEAR, 1);
builder.parseDefaulting(ChronoField.DAY_OF_MONTH, 1);
builder.parseDefaulting(ChronoField.HOUR_OF_DAY, 0);
builder.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0);
builder.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0);
builder.append(DateTimeFormatter.ofPattern(pattern));
Run Code Online (Sandbox Code Playgroud)

但这并不适用于所有模式。它似乎只允许未在pattern. 有没有办法测试ChronoField定义了哪些spattern然后有选择地添加默认值?

或者,我试过

TemporalAccessor temporal = formatter.parseBest(time,
        ZonedDateTime::from,
        LocalDateTime::from,
        LocalDate::from,
        LocalTime::from,
        YearMonth::from,
        Year::from,
        Month::from);
if …
Run Code Online (Sandbox Code Playgroud)

java simpledateformat

5
推荐指数
1
解决办法
789
查看次数

更改 HashSet / HashMap 内对象的 hashCode

我对 Java 比较陌生,对以下事情感到困惑:我通常ArrayList在设置内容之前向 an 添加对象。IE,

List<Bla> list = new ArrayList<>();
Bla bla = new Bla();
list.add(bla);
bla.setContent(); // content influences hashCode
Run Code Online (Sandbox Code Playgroud)

这种方法效果很好。我担心这种方法在与HashSets 或HashMaps一起使用时是否会给我带来麻烦。内部哈希表在添加对象时设置。如果setContent()在对象被添加到HashSetor HashMap(并且它的 hashCode 改变)之后被调用会发生什么?

添加/放入HashSets 或HashMaps之前,我应该完全设置(影响哈希码的)内容吗?通常是否建议在添加对象之前完成构建对象?

非常感谢您的见解。

java arraylist hashmap hashcode hashset

4
推荐指数
1
解决办法
946
查看次数