我确定这是一个很好的理由,但有人可以解释为什么java.util.Set界面缺乏get(int Index),或任何类似的get()方法?
似乎套装非常适合放入物品,但我找不到从中检索单个物品的优雅方式.
如果我知道我想要第一个项目,我可以使用set.iterator().next(),但是否则我似乎必须转换为数组来检索特定索引处的项目?
从集合中检索数据的适当方法是什么?(除了使用迭代器)
我确信它被排除在API之外意味着有一个很好的理由不这样做 - 有人可以开导我吗?
编辑: 这里有一些非常好的答案,还有一些说"更多背景".特定场景是一个dbUnit测试,我可以合理地断言查询返回的集只有一个项目,我试图访问该项目.
但是,没有这种情况,这个问题更有效,因为它仍然更受关注:
集合和列表之间有什么区别.
感谢所有人在下面的精彩答案.
我有一个关于Java的基本问题ArrayList.
当ArrayList被声明和初始化使用默认构造,对于10个元件的存储器空间被创建.现在,当我添加第11个元素时,会发生什么?是否会创建具有20(或更多)元素容量的新内存空间(这需要将元素从第一个内存位置复制到新位置)还是其他一些东西?
我查了这里.但我没有找到答案.
请分享知识.谢谢.
我在Java中放了一个键值对,HashMap并String使用该toString()方法将其转换为a .
是否可以将此String表示转换回HashMap对象并使用其对应的键检索值?
谢谢
该Javadoc中的com.google.common.collect.ImmutableSet提示,有两种方法来创建的实例ImmutableSet<E>,从类型的元素E(例如,E e1和E e2已经不是一个集合中)(即忽略copyOf从现有集合创建方法):
"of"方法:
ImmutableSet<E> set = ImmutableSet.of(e1, e2);
Run Code Online (Sandbox Code Playgroud)生成器:
ImmutableSet<E> set = new ImmutableSet.Builder<E>().add(e1).add(e2).build();
Run Code Online (Sandbox Code Playgroud)两种方法ImmutableSet.Builder#construct最终都使用,但我更喜欢哪一种?
JVM选项:
-Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8
正如预期的那样,JVM将为JVM堆分配近20MB的内存.
但请参阅以下GC详细信息:
PSYoungGen总计9216K,使用4612K [0x00000000ff600000,0x0000000100000000,0x0000000100000000]
eden space 8192K,56%使用[0x00000000ff600000,0x00000000ffa812d8,0x00000000ffe00000]
来自空间1024K,0%使用[0x00000000fff00000,0x00000000fff00000,0x0000000100000000]
空间 1024K,0%使用[0x00000000ffe00000 ,0x00000000ffe00000,0x00000000fff00000)
PSOldGen总计10240K,使用8192K [0x00000000fec00000,0x00000000ff600000,0x00000000ff600000]
对象空间10240K,80%使用[0x00000000fec00000,0x00000000ff400020,0x00000000ff600000] PSPermGen总计21248K,使用3033K [0x00000000f9a00000,0x00000000faec0000,0x00000000fec00000]
对象空间21248K,14 %used [0x00000000f9a00000,0x00000000f9cf6708,0x00000000faec0000)
年轻一代的规模与期权的预期一致-Xmn.尺寸为比伊甸园空间和生存空间的年轻一代如预期的那样的选项-XX:SurvivorRatio=8.但似乎JVM总共分配了近40MB的内存,所以很奇怪.为什么JVM总分配内存大于-Xmx?
ENV:
操作系统:win7 64位
JDK:构建1.6.0_43-b01 64位
Java堆被划分为称为代的区域,例如新一代,可以进一步划分,例如伊甸园空间。使用-XX:+PrintHeapAtGCJVM选项,每个堆区三个存储器地址被打印在GC日志的形式[A, B, C),其中A,B和C是存储器地址,例如:
eden space 838912K, 100% used [0x000000073ae00000, 0x000000076e140000, 0x000000076e140000)
Run Code Online (Sandbox Code Playgroud)
这些内存地址的含义是什么?
我在网上搜索过,但找不到对 GC 日志这部分的任何解释。
声明变量时,编译器是否分配4个字节的内存:
int a;
Run Code Online (Sandbox Code Playgroud)
或者在为其分配值时分配内存:
a = 5;
Run Code Online (Sandbox Code Playgroud)
什么时候分配内存?在变量声明或初始化期间?
from patsy import *
from pandas import *
dta = DataFrame([["lo", 1],["hi", 2.4],["lo", 1.2],["lo", 1.4],["very_high",1.8]], columns=["carbs", "score"])
dmatrix("carbs + score", dta)
DesignMatrix with shape (5, 4)
Intercept carbs[T.lo] carbs[T.very_high] score
1 1 0 1.0
1 0 0 2.4
1 1 0 1.2
1 1 0 1.4
1 0 1 1.8
Terms:
'Intercept' (column 0), 'carbs' (columns 1:3), 'score' (column 3)
Run Code Online (Sandbox Code Playgroud)
问题:我是否可以不读取此 DesignMatrix 给出的名称,而不是使用 Designinfo 指定列的“名称”(这基本上使我的代码的可重用性降低),以便稍后将其输入到 DataFrame 中,而无需知道预先确定“参考水平/对照组”水平是多少?
IE。当我做 dmatrix("C(carbs, Treatment(reference='lo')) + Score", dta)
"""
# How can I get …Run Code Online (Sandbox Code Playgroud) 我使用-Xms256m和-Xmx256mJVM选项将初始和最大Java堆大小设置为256MB .GC日志(使用-XX:+PrintHeapAtGC)表明堆大小为251904K(246MB),小于最小堆大小-Xms256m(参见最后一行日志).然而,这是因为所陈述的堆大小是可用的堆大小,不包括在不可用 的空间.
当我手动包含空间内存中的不可用时,派生的堆大小为262656K(256.5MB),略大于最大堆大小-Xmx(512KB):
[heap size] = [eden space size] + [from space size] + [to space size] + [OldGen size]
262656K = 66048K + 10752K + 10752K + 175104K
Run Code Online (Sandbox Code Playgroud)
为什么堆大小略大于最大堆大小-Xmx?
对于回归,我通常使用 sklearn 的OneHotEncoder.
我现在正在探索使用 patsy,但它似乎没有提供 One-hot 编码:http : //patsy.readthedocs.io/en/latest/categorical-coding.html
是否可以使用 patsy 指定 One-hot 编码?
java ×8
collections ×3
memory ×3
jvm ×2
patsy ×2
python ×2
set ×2
arraylist ×1
arrays ×1
guava ×1
hashmap ×1
heap ×1
immutability ×1
logging ×1
pandas ×1
python-2.7 ×1
scikit-learn ×1
statsmodels ×1