我感兴趣的是Python集合的真值,比如{'a', 'b'}或者空set set() (它与空字典{}不一样)。 特别是,我想知道当bool(my_set)是否为False当且仅当set my_set为空时。 忽略原始(如数字)以及用户定义的types, https : //docs.python.org/3/library/stdtypes.html#truth说: 以下值被认为是错误的: […] 任何空序列,例如'' , () , [] 。 任何空的映射,例如{} 。 […] 所有其他值都被认为是正确的 根据https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range ,一个集合不是一个序列(它是无序的,它的元素没有索引等等。 ): 有三种基本的序列types:列表,元组和范围对象。 而且,根据https://docs.python.org/3/library/stdtypes.html#mapping-types-dict , 目前只有一种标准的映射types,即字典 。 所以,就我所知,集合types不是一个可能是False的types。 但是,当我尝试, bool(set())评估为False 。 问题: 这是一个文档问题,还是我得到错误? 空集是唯一的真值是False集合吗?
我想创build类似于Util.Map.Entry新项目,它将包含结构key 。 问题是我不能实例化Map.Entry因为它是一个接口。 有谁知道如何为Map.Entry创build一个新的通用键/值对象?
在实践中,最好是返回一个像这样的空列表: return Collections.emptyList(); 或者像这样 : return new ArrayList<Foo>(); 或者这是完全依赖于你将要做什么与返回列表?
我在Vector中有一组对象,我想从中select一个随机子集(例如,返回100个项目,随机选取5个)。 在我第一次(非常草率)的传球中,我做了一个非常简单的或者是非常聪明的解决scheme: Vector itemsVector = getItems(); Collections.shuffle(itemsVector); itemsVector.setSize(5); 虽然这有好处和简单的好处,我怀疑它不会很好地扩展,即Collections.shuffle()至less必须是O(n)。 我不太聪明的select是 Vector itemsVector = getItems(); Random rand = new Random(System.currentTimeMillis()); // would make this static to the class List subsetList = new ArrayList(5); for (int i = 0; i < 5; i++) { // be sure to use Vector.remove() or you may get the same item […]
在Java的隐藏特性中 ,最佳答案提到了Double Brace Initialization ,其语法非常诱人: Set<String> flavors = new HashSet<String>() {{ add("vanilla"); add("strawberry"); add("chocolate"); add("butter pecan"); }}; 这个习语创build了一个匿名的内部类,只有一个实例初始化器,它可以使用“包含范围内的任何方法”。 主要问题:这听起来效率不高吗? 它的使用应该限于一次性的初始化吗? (当然,炫耀!) 第二个问题:新的HashSet必须是在实例初始化器中使用的“this”…任何人都可以阐明机制? 第三个问题:这个习语在生产代码中是不是太模糊了? 总结:非常非常好的答案,谢谢大家。 在问题(3)中,人们认为语法应该是清楚的(尽pipe我会build议偶然的评论,特别是如果你的代码会传递给可能不熟悉的开发人员)。 在问题(1)中,生成的代码应该快速运行。 额外的.class文件确实会导致jar文件混乱,并且程序启动稍微慢一些(感谢@coobird的测量)。 @Thilo指出,垃圾收集可能会受到影响,并且额外加载的类的内存成本在某些情况下可能是一个因素。 问题(2)是我最感兴趣的。 如果我理解了答案,那么DBI中发生的事情就是匿名内部类扩展了由new运算符构造的对象的类,因此具有引用正在构造的实例的“this”值。 井井有条。 总的来说,DBI让我觉得自己是一个知识分子的好奇心。 Coobird和其他人指出,你可以使用Arrays.asList,可变参数方法,Google Collections和build议的Java 7集合文字实现相同的效果。 像Scala,JRuby和Groovy等更新的JVM语言也为列表构build提供简洁的符号,并与Java良好的互操作性。 鉴于DBI混乱了类path,减慢了类的加载速度,并使代码更加隐晦,我可能会避开它。 不过,我打算在一位刚刚获得SCJP的朋友面前谈论这个问题,并且热衷于讨论Java语义。 ;-) 感谢大家! 7/2017:Baeldung对双支撑初始化有一个很好的总结 ,并认为它是一种反模式。