- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是一个相当新手的程序员,对Java中的数组有疑问。考虑一个二维数组[i] [j]。 i的值在运行时确定。 j的值已知为7。在[i] [6]和[i] [7],我希望能够存储更深的数组或值列表。是否可能在数组中有类似数组的内容,其中在[i] [6]和i [7]的点处有x和y轴和z轴,还是我需要完整的3D内存立方体来能够存储和浏览我的数据?
详细信息:我的目标是运行一个查询,该查询从两个表(目标表和攻击者)中获取某些信息。我的查询很好,我可以得到一个结果集。我真正想要做的是存储结果集中的数据,并以更有用的格式将其显示在表格中,同时在数据可视化程序中使用它。我得到的字段是:server_id,target_ip,威胁级别,client_id,Attacker_ip和num_of_attacks。我可以得到20条记录,这些记录具有相同的server_id,target_ip,threat_level,client_id,但不同的Attacker_ip和num_of_attacks,因为该计算机受到了20次攻击。第三维将允许我执行此操作,但对于server_id,target_ip,threat_level,client_id,第3轴/数组将为空
在查看答案并进行更多思考之后,我更新了,我想知道使用对象数组列表是否对我最合适和/或可行。使数据井井有条且易于访问对我来说是一个很大的问题。在psedu代码中,将是这样的:
Object[] servers
String server_id
String target
String threat_level
String client_id
String arr[][] // this array will hold attacker_ip in one axis and num_of_attacks in the other in order to keep the relation between the attacking ip and the number of attacks they make against one specific server
最佳答案
首先,如果您有一个DataType[i][j]
数组,并且j
已知为7,则可以使用的2个最大索引是5和6,而不是6和7。这是因为Java数组索引基于0。创建数组时,您指定的是元素数,而不是最大索引(该索引总是比元素数小1)。
其次,当问题域已经使用多维数组时,使用多维数组并没有错。我可以想到的是科学应用程序,数据分析应用程序,但还不止这些。相反,如果您正在建模一个业务问题,而该业务领域的领域不使用多维数组,则最好使用更多的抽象数据结构,而不是仅仅因为它们看起来非常有效,而将数组强加到设计中,而要在其他语言中体验更重要或其他原因。
如果没有太多信息,我想您可以用List
类型(例如ArrayList
)更好地表示您的“第一维度”。为什么?因为您说它的大小是在运行时确定的(而且我认为这是间接产生的,而不是从某个地方获得的幻数)。 List
与数组相似,但具有它们“知道”如何增长的特性。当程序从源中读取新元素或以其他方式发现/创建它们时,您的程序可以轻松添加新元素。它还可以轻松地将它们插入开头或中间,但这很少见。
因此,您的第一个维度将是:ArrayList<
something >
,其中 something 是第二个维度的类型。
关于第二维,您说它的大小为7,但是前5个项目接受单个值,而后2个为多个。这已经告诉我这7个项目不是同质的,因此数组指示错误。用一个类可以更好地表示此维度。为了理解此类的结构,我们假设5个单值元素是同质的(类型为BigDecimal
)。数组是最自然的表示形式,因为它的大小是已知的。剩下的2个多值元素似乎也构成一个数组。但是,鉴于其2个元素中的每个元素都包含不确定数量的数据项,此数组的元素类型不应像以前的情况那样是BigDecimal
,而是ArrayList
。这些ArrayList
的元素类型是多个值的类型(也称为BigDecimal
)。
最终结果是:
class SecondD {
BigDecimal[] singleValued= new BigDecimal[5] ;
ArrayList<BigDecimal>[] multiValued= new ArrayList<BigDecimal>[2] ;
{
multiValued[0]= new ArrayList<BigDecimal>() ;
multiValued[1]= new ArrayList<BigDecimal>() ;
}
}
ArrayList<SecondD> data= new ArrayList<SecondD>() ;
class SecondD {
BigDecimal[] singleValued;
ArrayList<BigDecimal>[] multiValued;
}
ArrayList<SecondD> data= new ArrayList<SecondD>() ;
data.get(130).singleValued[2]
data.get(130).multiValued[1].get(27)
class SecondD {
BigDecimal monday;
BigDecimal tuesday;
BigDecimal wednesday;
BigDecimal thursday;
BigDecimal friday;
ArrayList<BigDecimal> saturday= new ArrayList<BigDecimal>() ;
ArrayList<BigDecimal> sunday= new ArrayList<BigDecimal>() ;
}
ArrayList<SecondD> data= new ArrayList<SecondD>() ;
data.get(130).wednesday
data.get(130).sunday.get(27)
monday
执行操作时,也将使用tuesday
,wednesday
,thursday
和friday
(不是saturday
和sunday
,因为它们是完全不同的东西,请记住吗?)执行它,那么数组可能会更好。例如,要对存储为数组的项进行求和,则仅需要:element= data.get(130) ;
int sum= 0 ;
for(int e: element.singleValued ) sum+= e ;
element= data.get(130) ;
int sum= 0 ;
sum+= element.monday ;
sum+= element.tuesday ;
sum+= element.wednesday ;
sum+= element.thursday ;
sum+= element.friday ;
关于java - 2D数组可以在给定点内保存数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18159030/
当我在定点 Z3Py 中启用解释生成选项时,我收到包含以下消息的核心转储。 Error setting 'DL_GENERATE_EXPLANATIONS', reason: unknown opti
我正在开发一些代码,可以从 HW 获取浮点或定点数据。目前我们将其作为 float 。 底层API都是定点的。所以我们必须将数据作为定点传回。我们使用的算法是 Cholesky。我想知道为什么我们必须
我有一个关于在 MATLAB 中为 Texas Instruments TMS320C64xx DSP 编写算法的问题: 我在 MATLAB 中草率地实现了我的过滤器。我的目标是使用 MATLAB E
我需要将 float 转换为Q31定点,Q31表示1个符号位,0位表示整数部分,31位表示小数部分。这意味着 Q31 只能表示 [-1,0.9999] 范围内的数字。 根据定义,从浮点转换为定点时,会
我正在使用第 3 方定点 antilog() 函数来计算分贝 out_mag = 10^( in_db/20 ) 的幅度。 antilog() 采用 Q6.25 格式作为输入,并在输出时提供 Q16.
我想将一个定点数(Q31/int32 表示具有 31 个小数位的小数)除以另一个 Q31/int32。我想计算z = y/x,知道abs(x)>abs(y)。因此,z<1,因此可以表示为另一个Q31/
我是一名优秀的程序员,十分优秀!