我想用Java制作集合地图,所以我可以制作类似的东西
public void add(K key, V value) {
if (containsKey(key)) {
get(key).add(value);
} else {
Collection c = new Collection();
c.add(value);
put(key, value);
}
}
Run Code Online (Sandbox Code Playgroud)
我试图用类似的东西制作它
public class CollectionMap<K, C extends Collection<V>> extends HashMap<K, C>
Run Code Online (Sandbox Code Playgroud)
但编译器抱怨该<V>部分,并且仍然存在制作适当的新集合的问题.
目前,我已经创建了两个类:SetMap,看起来像这样
1: public class SetMap<K, V> extends HashMap<K, Set<V>> {
2:
3: public void add(K key, V value) {
4: if (containsKey(key)) {
5: get(key).add(value);
6: } else {
7: Set<V> list = new HashSet<V>();
8: list.add(value);
9: put(key, list);
10: } …Run Code Online (Sandbox Code Playgroud) 概述:
首先,我UITableView使用Interface Builder将其置于Xcode生成的视图中.视图的文件所有者设置为Xcode生成的子类UIViewController.为了这个子类我已经加入工作的实施numberOfSectionsInTableView: tableView:numberOfRowsInSection:以及tableView:cellForRowAtIndexPath:与表视图的dataSource,并delegate通过在Interface Builder文件所有者连接到这个类.
上述配置没有问题.当我想将这个Table View dataSource和delegate-implementations移到一个单独的类时,问题就出现了,很可能是因为除了Table View之外还有View上的其他控件,我想将Table View相关的代码移到它的自己的班级.为此,我尝试以下方法:
UITableViewController在Xcode中创建一个新的子类numberOfSectionsInTableView:,tableView:numberOfRowsInSection:并移动tableView:cellForRowAtIndexPath:到新的子类UITableViewController的顶层 ,删除为此自动创建的/ ,然后将该类设置为与新子类匹配UIViewUITableViewUITableViewControllerUITableViewControllerUITableView的现有dataSource和delegate连接,并将它们连接到新的UITableViewController完成后,我没有工作UITableView.我最终得出了三个结果中的一个,这些结果似乎随机发生:
UITableView加载时,我得到一个运行时错误,指示我发送tableView:cellForRowAtIndexPath:到一个无法识别它的对象UITableView加载时,项目会毫无错误地进入调试器UITableView没有出现通过一些调试并创建了一个基本项目来重现这个问题,我通常会看到上面的第三个选项(没有错误但没有可见的表视图).我添加了一些NSLog调用,发现虽然numberOfSectionsInTableView:并且numberOfRowsInSection:都被调用,但cellForRowAtIndexPath:不是.我确信我错过了一些非常简单的事情,希望对于经验丰富的人来说答案可能是显而易见的.如果这不是一个简单的答案,我很乐意更新一些代码或示例项目.谢谢你的时间!
完成重现的完整步骤:
TableTestTableTestViewController.xib …Knuth 最近反对 64位系统,称对于适合4 GB内存的程序,"它们实际上会丢弃一半的缓存",因为指针是32位系统的两倍.
我的问题是:通过在64位计算机上安装32位操作系统可以避免这个问题吗?是否有任何带宽密集型基准测试证明了这种情况下的优势?
我想简化执行调用Oracle数据库的Groovy脚本的过程.如何将ojdbc jar添加到默认的类路径中,以便我可以运行:
groovy RunScript.groovy
Run Code Online (Sandbox Code Playgroud)
代替:
groovy -cp ojdbc5.jar RunScript.groovy
Run Code Online (Sandbox Code Playgroud) 如何在PHP中将图像转换为黑白图像?
不只是把它变成灰度,而是每个像素变成黑色或白色?
前几天在我的白皮书中巡航时,我在C关键字列表中注意到了. entry是该列表中的关键字之一.
它留作将来使用.回想一下我的Fortran时代,有一种类型的函数使用entry语句来创建第二个参数签名,或者进入函数的入口点.
这是最初打算用于什么条目?或者完全不同的东西?
关于entry关键字的故事是什么?
我想创建一个跨越多行的字符串,以分配给Label Caption属性.这是如何在Delphi中完成的?
我有一个aspx页面,它将从客户端pc上传图像到服务器硬盘
但现在我需要改变我的程序,这样我就可以在上传时调整图像大小.
有没有人对此有任何想法?我无法使用输入文件服务器控件找到这样的属性/方法
那里有人指导我吗?
SOA的原则之一是:"服务是自治的".我有2项服务.服务A取决于服务B.除非服务B启动并运行,否则服务A无法为客户端提供服务.我是否违反了这一宗旨?
或者,如果自治必须意味着"解耦",那么如果我有故障保护,我是否满足了这个原则(例如,如果主要实例已经关闭,那么另一个运行在其他地方的服务B的实例是连接到的).这可能满足我的可用性要求,但我不确定这如何可以减少我的依赖性.是的,故障保险甚至可以是来自第三方的服务C,在这种情况下,我确实提高了我的自主权.
或者这个原则是否意味着必须将服务设计为"fifedoms",并且具有明确定义的接口,用于获取和输出数据.然而,一些大师似乎认为你甚至需要存储你在内部收到的这些数据,以减少依赖并维持你的自主权......
如果我将服务视为具有消息传递的组件,这是一个错误吗?:)
思考?
我遇到了Iterator.remove()在HashSet上调用的问题.
我有一组带时间戳的物体.在向Set添加新项目之前,我遍历该集合,识别该数据对象的旧版本并将其删除(在添加新对象之前).时间戳包含在hashCode和equals()中,但不包括equalsData().
for (Iterator<DataResult> i = allResults.iterator(); i.hasNext();)
{
DataResult oldData = i.next();
if (data.equalsData(oldData))
{
i.remove();
break;
}
}
allResults.add(data)
Run Code Online (Sandbox Code Playgroud)
奇怪的是,i.remove()默默地对集合中的某些项目失败(没有异常).我已经证实了
实际上调用了i.remove()行.我可以直接在Eclipse的断点处从调试器调用它,但仍然无法更改Set的状态
DataResult是一个不可变对象,因此在最初添加到集合后它不能更改.
equals和hashCode()方法使用@Override来确保它们是正确的方法.单元测试验证了这些工作.
如果我只使用for语句和Set.remove,这也会失败.(例如循环遍历项目,找到列表中的项目,然后在循环后调用Set.remove(oldData)).
我已经在JDK 5和JDK 6中进行了测试.
我以为我必须遗漏一些基本的东西,但是在我的同事上度过了一些重要的时间后,我感到难过.有什么建议要检查吗?
编辑:
有一些问题 - DataResult是真正不可改变的.是.没有制定者.当检索Date对象(这是一个可变对象)时,它通过创建一个副本来完成.
public Date getEntryTime()
{
return DateUtil.copyDate(entryTime);
}
public static Date copyDate(Date date)
{
return (date == null) ? null : new Date(date.getTime());
}
Run Code Online (Sandbox Code Playgroud)
进一步编辑(一段时间后):为了记录 - DataResult不是一成不变的!它引用了一个对象,该对象的哈希码在持久化到数据库时发生了变化(我知道这是一种不好的做法).事实证明,如果使用瞬态子对象创建了DataResult,并且子对象被持久化,则DataResult哈希码已更改.
非常微妙 - 我多次看了这个,并没有注意到缺乏不变性.