小编pet*_*ust的帖子

重构Java数组和原语(double [] [])到集合和泛型(List <List <Double >>)

我一直在重构一次性代码,这是我几年前以类似FORTRAN的方式编写的.大多数代码现在更加有条理和可读.然而,算法的核心(性能关键)使用1维和2维Java数组,其典型代表是:

    for (int j = 1; j < len[1]+1; j++) {
        int jj = (cont == BY_TYPE) ? seq[1][j-1] : j-1;
        for (int i = 1; i < len[0]+1; i++) {
            matrix[i][j] = matrix[i-1][j] + gap;
            double m = matrix[i][j-1] + gap;
            if (m > matrix[i][j]) {
                matrix[i][j] = m;
                pointers[i][j] = UP;
            }
            //...
        }
    }
Run Code Online (Sandbox Code Playgroud)

为清楚起见,可维护性以及与其余代码的接口,我想重构它.但是,在阅读用于数组Java Generics的Java Generics语法和数字时,我有以下问题:

  • 性能.该代码计划使用大约10 ^ 8 - 10 ^ 9秒/年,这几乎是可管理的.我的阅读建议将double变为Double有时可以在性能上增加3倍.我想要其他经验.我也希望从foo []移动到List也会受到影响.我没有第一手的知识,经验也很有用.

  • 数组绑定检查.这在double []和List中有不同的处理方式吗?我期望一些问题违反界限,因为算法相当简单并且仅应用于少数数据集.

  • 如果我不重构那么代码就有两种方法的丑陋且可能是脆弱的混合.我已经在尝试写下这样的东西:

    List <double []>和List …

java arrays generics collections

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

在设计新代码和算法时我应该使用UML吗?

我正在设计一个新系统,发现我正在努力解决我想做的事情.一个症状是,每次我重新解决问题时,我都必须尝试在纸上绘制组件的关系.(我不清楚这些组件究竟是什么或关系是什么 - 例如我设法删除了一个没有做任何事情的组件).

UML是一种有用的前进方式吗?我曾经非常怀疑并尝试早期版本,其中生产版本花费太多钱.现在我看到有Netbeans中的一个插件,它特别有模式的一个很好的选择(就凭这可能会使它值得的).

我已经阅读了SO上的大多数顶级帖子,似乎没有一个非常明确的共识.我的背景是,这与研究有关,而不是为客户编码,因此主要目的不是记录最终产品,而是帮助清除我的想法(并可能编写一些简单的结构).

如果任何答案支持UML,那么建议生产需要多长时间以及使用它的频率将是有用的.(作为参考,我每天都使用测试,记录器和调试器).

补充是否有任何UML软件可以强制执行代码和图表之间的一致性(在任何级别).我假设,当创建一个StrategyPattern时,它可以生成存根代码.但是,如果模式被破坏,那么代码是否可以被包含在内,UML工具会检测到这个?

uml

5
推荐指数
2
解决办法
3145
查看次数

编写便携式域特定语言

我想知道部署特定于域的语言的好策略,这种语言必须至少运行2种语言(Java,C#)和更多(Python,可能还有Javascript).

一些背景.我们已经开发并部署了目前用C#编写的特定于域的语言.它通过一系列方法调用进行部署,这些方法调用的参数是公共语言基元(字符串,双精度等),集合(IEnumerable,HashSet,...)或特定于域的库(CMLMolecule,Point3,RealSquareMatrix)中的对象.该库经过了充分测试,并且对象必须符合稳定部署的XML模式,因此更改将是进化和管理的(至少这是希望).

我们希望这种语言能够被一个广泛的,部分计算机文化的社区所使用,用于在没有中央控制的情况下攻击他们自己的解决方案.理想情况下,DSL将创建一定程度的封装并产生他们所需的基本功能.这些库将管理详细的算法,这些算法有很多种,但却众所周知.在域特定语言和功能库中, DSL的要求有很多共同之处.

我很欣赏有关最佳架构的想法(显然,一旦它部署,我们就不能轻易回溯).选择至少包括:

  • 创建IDL(例如通过CORBA).W3C为XML DOM做了这个 - 我讨厌它 - 它似乎有点矫枉过正
  • 为每个平台手动创建类似的签名,并尽最大努力使它们保持同步.
  • 创建可解析语言(例如CSS).
  • XML中的声明性编程(参见XSLT).这是我的首选解决方案,因为它可以被搜索,操纵等.

表现并不重要.目的明确是.

编辑有关应用程序调用是否构成DSL的讨论.我发现了Martin Fowler对DSL的介绍(http://martinfowler.com/dslwip/Intro.html),他认为简单的方法调用(或链式调用)可以称为DSL.所以系列如:

point0 = line0.intersectWith(plane);
point1 = line1.intersectWith(plane);
midpoint = point0.midpoint(point1);
Run Code Online (Sandbox Code Playgroud)

可以被认为是DSL

c# java dsl

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

普通程序员是否有"足够好"的哈希函数?

我们被告知我们应该为我们的类实现hashCode(),但是像我这样的大多数人都不知道如何做到这一点,或者如果我们把它"弄错"会发生什么.例如,我需要一个哈希函数来索引树中的节点(在(解析)树的集合中查找最频繁的子树).在这种情况下,我需要基于有序的子节点递归地生成哈希码,例如

hashCode = function(child1.hashCode, child2.hashCode, ...)
Run Code Online (Sandbox Code Playgroud)

最近的hashCodes 讨论中,答案包括字符串的散列(基于长素数和31)以及位移.String哈希是:

// adapted from String.hashCode()
public static long hash(String string) {
  long h = 1125899906842597L; // prime
  int len = string.length();

  for (int i = 0; i < len; i++) {
    h = 31*h + string.charAt(i);
  }
  return h;
}
Run Code Online (Sandbox Code Playgroud)

我对安全性不感兴趣,也不介意碰撞.是否存在一个"通用函数",用于组合有序对象的哈希码,它们会比损害更好(并且比完全不调用它更好)?

还有一个我们可以查找常见案例的网站吗?字符串,列表等)

我没有指定语言,因为我希望有通用的方法.但如果它是严格的语言,那么请说明语言以及为什么它不是普遍的.

更新两个建议是使用IDE的hashCode生成器.这似乎是一个很好的默认; 这是Netbeans:

public int hashCode() {
    int hash = 5;
// objects
    hash = 97 * hash + (this.rootElement != null ? this.rootElement.hashCode() : …
Run Code Online (Sandbox Code Playgroud)

language-agnostic hash

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

删除dependencies.dependency.version错误

我正在使用Eclipse中的一个mavenised java项目,其中有几个模块无法构建从pom文件中抛出错误:

Project build error: 'dependencies.dependency.version' for cml:jumbo-converters-molecule-xyz:jar is missing.
Run Code Online (Sandbox Code Playgroud)

这些错误与子模块有关.它们不带版本号.所有子模块都不会发生这种情况

这是否意味着我必须为所有pom文件和pom文件中的所有引用添加版本号?或者我可以添加一些忽略版本号的东西,直到我建立它为止?

java eclipse maven

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

图表有标记语言吗?

是否有常用的图形标记语言(拓扑类).我希望Nodeelements,例如Node和Edge以及显示方向性和标签的属性

更新:到目前为止,可以选择2,GraphML和DotML.GraphML自2007年以来没有变化,但也许它不需要!SO读者可能希望知道每个工具集都有 - 我鼓励Gephi使用GrahML,显然DotML有GraphViz和其他工具集.(无论我选择哪种语言,我都会用Java编写一个有限的工具包)

更新:我个人使用DotML.我需要用于建模的语言(例如,向节点和边添加标签,权重等,因此需要我自己的额外命名空间).DotML的吸引力在于它似乎是活跃的,而graphViz可以利用输出.因人而异

xml

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

正则表达式进入无限循环

我正在解析表单的(种类)名称:

Parus Ater
H. sapiens
T. rex
Tyr. rex
Run Code Online (Sandbox Code Playgroud)

通常有两个术语(二项式)但有时有3个或更多.

Troglodytes troglodytes troglodytes 
E. rubecula sensu stricto
Run Code Online (Sandbox Code Playgroud)

我写

[A-Z][a-z]*\.?\s+[a-z][a-z]+(\s*[a-z]+)*
Run Code Online (Sandbox Code Playgroud)

它大部分时间都有效但偶尔会进入无限循环.需要一些时间来追踪它是在正则表达式匹配中,然后我意识到这是一个错字,我应该写

[A-Z][a-z]*\.?\s+[a-z][a-z]+(\s+[a-z]+)*
Run Code Online (Sandbox Code Playgroud)

表现正常.

我的问题是:

  • 为什么会发生这种循环?
  • 有没有办法在运行程序之前检查类似的正则表达式错误?否则,在分发prgram之前可能难以捕获它们并导致问题.

[注意:对于物种,我不需要更一般的表达式 - 对于物种名称,有一个正式的100+行正则表达式规范 - 这只是一个初始过滤器].

注意:问题出现了,因为虽然大多数名称被精确地提取为2或偶尔3/4术语(因为它们用斜体字表示),但是有一些误报(如"Homo sapiens lives in big cities like London")并且匹配在"L"处失败.

注意:在调试中我发现正则表达式经常完成但速度很慢(例如在较短的目标字符串上).通过病理案例发现这个错误是很有价值的.我学到了一个重要的教训!

java regex

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

为双打创建一个HashSet

我希望使用定义的公差()创建一个HashSet实数(目前为Doubles)epsilon,( 因为使用仅用于精确相等而且是最终类我不能使用它.我最初的想法是扩展(例如,),用方法,并创建一个新的类,其中使用从该值.不过,我想检查是否有现有的解决方案和现有的F/OSS库.Assert.assertEquals(double, double, double)
Double.equals()DoubleHashSetDoubleHashSetsetEpsilon(double)ComparableDoubleequals()DoubleHashSet

(将来我想把它扩展到实数的元组 - 例如矩形和立方体 - 所以一般的方法更可取

注意:@NPE表示这是不可能的.不幸的是我怀疑这是正式的 :-)所以我想知道是否有近似的方法......其他人一定有这个问题并且大致解决了.(我已经经常使用一个工具Real.isEqual(a, b, epsilon),它非常有用.)我准备接受一些不常见的传递性错误.

注意:我将使用TreeSet,因为它解决了"几乎等于()"的问题.稍后我将比较complexNumbers,矩形(以及更复杂的对象),并且能够设置两个相等的限制是非常有用的.复杂数字没有简单的自然排序(也许Cantor方法可行),但我们可以判断它们是否几乎相等.

java double hashset

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

为字符串列表创建正则表达式

我从科学文献中提取了一系列表格,这些表格由列组成,每列都是不同的类型.这是一个例子价值表

我希望能够为每列自动生成正则表达式.显然有一些简单的解决方案,.*所以我会添加他们只使用的约束:

  • [A-Z] [a-z] [0-9]
  • 明确标点符号(如',',''')
  • "简单"量词(例如 {3,4}

上表的"最佳"答案是:

 [A-Z]{3}
 [A-Za-z\s\.]+
 \d{4}\sm
 \d{2}\u00b0\d{2}'\d{2}"N,\d{2}\u00b0\d{2}'\d{2}"E
 (speciosissima|intermediate|troglodytes)
 (hf|sr)
 \d{4}
Run Code Online (Sandbox Code Playgroud)

当然,如果我们移出地理区域,第四个正则表达式会破裂,但软件不知道这一点.目的是收集许多正则表达式,比如说"坐标"并概括它们,可能是部分手动的.仅当存在少量不同的字符串时才会创建枚举.

我很感激能够做到这一点的(特别是F/OSS)软件的例子,特别是在Java中.(它类似于Google的Refine).我4年前就知道这个问题了,但这并没有真正回答问题和text2re网站似乎是互动的.

注意:我注意到投票结束为"过于本地化".这是一个非常普遍的问题(给出的表只是一个例子),正如Google/Freebase开发的Refine解决这个问题所示.它可能涉及各种各样的表格(例如财务,新闻等).这是一个浮点值: 在此输入图像描述

自动确定某些权威机构报告实际年龄(例如,不是几个月,几天)并使用2位数的精确度将是有用的.

regex

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

如何在入门值和计数上对Guava Multiset进行排序?

我有一个Guava,Multiset<Integer>并希望通过按(a)元素值和(b)元素计数排序的条目独立迭代.我用Simplest方法按元素频率的顺序迭代Multiset?

ImmutableMultiset<Integer> entryList = Multisets.copyHighestCountFirst(myIntegerMultiset);
for (Integer i : entryList) {
    System.out.println("I"+i);
}
Run Code Online (Sandbox Code Playgroud)

但这会返回所有条目,而我想要一个排序列表Multiset.Entry<Integer>(每个唯一值一个),这将允许我得到计数​​.

我想独立地得到相同的Multiset.Entry<Integer>排序列表<Integer>.

java sorting multiset guava

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

标签 统计

java ×6

regex ×2

arrays ×1

c# ×1

collections ×1

double ×1

dsl ×1

eclipse ×1

generics ×1

guava ×1

hash ×1

hashset ×1

language-agnostic ×1

maven ×1

multiset ×1

sorting ×1

uml ×1

xml ×1