我正在从scala 2.7切换到scala 2.8并使用订购.它看起来很直接,但我想知道我可以减少一点点冗长.例如:
scala> case class A(i: Int)
defined class A
scala> object A extends Ordering[A] { def compare(o1: A, o2: A) = o1.i - o2.i}
defined module A
Run Code Online (Sandbox Code Playgroud)
如果我然后尝试创建一个TreeMap,我会收到一个错误
scala> new collection.immutable.TreeMap[A, String]()
<console>:10: error: could not find implicit value for parameter ordering: Ordering[A]
new collection.immutable.TreeMap[A, String]()
^
Run Code Online (Sandbox Code Playgroud)
但是,如果我明确指定对象A作为排序它可以正常工作.
scala> new collection.immutable.TreeMap[A, String]()(A)
res34: scala.collection.immutable.TreeMap[A,String] = Map()
Run Code Online (Sandbox Code Playgroud)
我是否总是必须明确指定顺序或是否有更短的格式?
谢谢
无论如何,我可以为JVM中的所有对象定义一个序列/顺序,这样对于任何两个不同的对象o1或o2,有一个明确定义的规则,表示o1> o2或o2> o1和o1 == o2 if和only如果它们是同一个对象?
identityHashCode()比较将是一个很好的候选者,如果有无碰撞保证(没有).
出生时间也会起作用 - 如果我能以某种方式获得它.
有任何想法吗?
谢谢!
我正在尝试构建一个脚本,它将动态排列照片,就像拼贴一样,与http://lightbox.com/explore#spotlight上的内容非常类似.
我当然可以编写代码,用不同的照片集来处理每个案例,但我更愿意拥有能够处理任意数量照片的算法.这里解释的算法http://www.hpl.hp.com/techreports/2008/HPL-2008-199.pdf在第4章中看起来与我需要做的非常相似.在我的情况下,垂直和水平比率总是相同的.我会定义一个边界框,每个节点可以分割多少个级别.边界框将具有相同的水平照片比例.如果算法不能适合所有图像,我会返回一个级别并将其留在那里或从可用照片池中选择另一张照片.
我的问题非常类似于这个算法在屏幕上排列图像,但我不知道如何前进.任何进一步的指导或伪代码都会非常有用.
这是关于树图的noobie问题.我已经阅读了Java API和其他文档,但我仍然不清楚它是如何工作的.
根据我的理解,java(或任何语言)中的树有点像家谱; 你说的地方:
Layer 1 OldestGuy
Layer 2 OldGuy1 Oldguy2 OldGuy3 OldGuy4 OldGuy5
Layer 3 Guy1 Guy2 Guy3 Guy4 Guy5 Guy6........ etc
Run Code Online (Sandbox Code Playgroud)
其中第1层有1个值(即中心节点),并且从那里可以在每个后续层中有任意数量的值(或者Guys),并且一些"分支"可以比其他更长(例如它可以是OldestGuy) - > OldGuy1 - > Guy1&Guy2 ... Guyn同时另一个分支只是OldestGuy - > OldGuy4)
考虑到这一点,我试图在特定分支的特定位置为TreeMap添加值,同时建立特定的连接,但我似乎得到的结果与HashMap的结果相同.
(看起来我想做的事情需要比TreeMap更多的东西......因为Key(或Layer(?)对于几个不同的值会是相同的)
任何建议/解释都会很棒,因为我觉得好像我正在用这个咆哮错误的树.
我已经看到使用googles .jar(例如家谱)完成此操作的示例,但我只是想了解这一点,因为TreeMap和Trees之间似乎存在很多冲突以及如何在其中存储数据.
我有一个asp.net mvc网站,并使用javascript树形图控件来显示热图.这个控件工作得很好,但我想看看我是否可以将其他一些json字段粘贴到用于更新另一个div的回调中.
有谁知道这是否可行.现在我必须反复弹跳并做两个单独的ajax调用,但我想看看我是否可以传递这个信息以及treemap json响应.
有一个对象ObjectA有一个列表ObjectB.TreeMap里面有一个ObjectB.它TreeMap有一个String关键字和List另一个对象ObjectC作为值.这个TreeMap和list内部已经显示在jsp使用s:iterator和s:textfield,它正在正确显示.即s:textfield中的"值"是正确的.现在,修改文本字段时出现问题.我们如何捕获动作类中ObjectC内的修改值?使用此处给出的代码,键("Key1")出现在操作中,但值为null.
Java代码
public class ObjectA implements Serializable {
private Integer attr1;
private List<ObjectB> objB;
//...getters and setters....
public class ObjectB implements Serializable {
private Integer attr11;
private TreeMap<String,List<ObjectC>> allPlainFields;
// ...getters and setters....
public class ObjectC implements Serializable {
private Integer attr111;
public String attr112;
// ...getters and setters....
Run Code Online (Sandbox Code Playgroud)
JSP代码
<s:iterator value="objA.objB" var="currentObjB" status="currentGroupStatus"> …Run Code Online (Sandbox Code Playgroud) 我有一个字符串列表.我想基于返回double的函数来评估每个字符串.然后我想要前5个字符串,基于他们的计算值.如果少于5,我想要所有这些(按顺序).假设字符串是化学化合物,函数计算质量.该功能在计算上很昂贵; 我需要每串评估一次.(不过我只是在这里编制数据.)
H2O => 18.5
C12H11O22 => 109.1
HeNe => 32.0
H2SO4 => 54.37
HCl => 19.11
4FeO3 => 82.39
Xe6 => 281.9
Run Code Online (Sandbox Code Playgroud)
程序应返回按其各自值排列的前五个字符串.对于此示例数据:H20, HCl, HeNe, H2SO4, 4FeO3.实际上,我并不关心订单; 我只需要任何顺序的五个最低点.
我想过如何在Perl中做到这一点.这只是几行:
foreach $s (@str) {
$strmap{$s} = f($s);
}
@sorted = sort { $strmap{$a} <=> $strmap{$b} } keys %strmap;
return @sorted[0, 4]
Run Code Online (Sandbox Code Playgroud)
但我需要用Java来做.这让我发疯了.
首先,我尝试填充a HashMap<String, Double>,然后使用Collections.sort自定义比较器,就像Perl版本一样.但是比较器的范围使它无法引用HashMap来查找值.
然后我尝试了一个TreeMap<String, Double>,但它只按键进行排序,没有任何强制可以让它按值排序.
所以我试了一下TreeMap<Double, String>.它将丢弃具有相同Double的条目.但是,将字符串映射到同一个Double的可能性很低,所以我向前推进.将条目添加到TreeMap没有问题,但是我试图从中提取值时遇到了问题.
TreeMap提供了一个名为的方法subMap,但其参数是用于分隔子集的键.我不知道它们是什么; 我只想要前五个.所以我尝试使用该values方法从TreeMap中获取所有值,希望它们按顺序排列.然后我就可以获得前十名.
ArrayList<String> strs = (ArrayList<String>)(treemap.values());
return new …Run Code Online (Sandbox Code Playgroud) 我有一个TreeMap,它有一个字符串键,值部分是一个具有至少四个值的List.
Map<String,List<String>> mMap = new TreeMap<String,List<String>>();
Run Code Online (Sandbox Code Playgroud)
我正在使用树形图,以便我的键被排序.但是在排序之后我想将这个TreeMap映射到listview.我想将Map转换为列表,然后为listview构建一个Adapter.但是当我这样做时,我无法转换它
ArrayList<String> trendyList = new ArrayList<String>(mMap);
Run Code Online (Sandbox Code Playgroud)
它说: The constructor ArrayList<String>(Map<String,List<String>>) is undefined
有没有其他方法可以做到这一点?
我试图根据词频(即基于值)对地图进行排序.为此,我已经覆盖了比较器并传递给了TreeMap,但我得到了这个奇怪的输出.
public class WordFrequency {
public static String sentence = "one three two two three three four four four";
public static Map<String, Integer> map;
public static void main(String[] args) {
map = new HashMap<>();
String[] words = sentence.split("\\s");
for (String word : words) {
Integer count = map.get(word);
if (count == null) {
count = 1;
} else {
++count;
}
map.put(word, count);
}
Comparator<String> myComparator = new Comparator<String>() {
@Override
public int compare(String s1, String s2) { …Run Code Online (Sandbox Code Playgroud) SortedMap接口的TreeMap.lastKey()部分的时间复杂度是多少?
oracle文档提到了有关TreeMap的信息:
此实现为containsKey,get,put和remove操作提供了保证的log(n)时间成本。
treemap ×10
java ×7
map ×3
collections ×2
android ×1
binary-tree ×1
callback ×1
comparable ×1
comparison ×1
hashcode ×1
hashmap ×1
javascript ×1
json ×1
list ×1
ognl ×1
packing ×1
photo ×1
scala ×1
scala-2.8 ×1
sortedmap ×1
sorting ×1
struts2 ×1