用java对元素进行分组
我有 对和作为要打印的输出用java对元素进行分组,java,grouping,Java,Grouping,我有 对和作为要打印的输出 b a, c b, c a, d e 你能给我一些提示,如何用java解决这个问题吗。 谢谢 使用TreeMap,其中键是元素名(a,b..),值是组(可以包含组号以及您需要了解的任何其他信息) 首先尝试定位该组。如果找不到,请创建一个新组并将其放入地图中。最后,只需迭代条目集即可打印键值对 我不会为您发布代码,因为这看起来像是一个家庭作业。我会使用列表 对于每一对,扫描您的组数组,以确定其中一对是否已在组中。如果是,则添加另一个 将一个或另一个对添加到组后
b a,
c b,
c a,
d e
你能给我一些提示,如何用java解决这个问题吗。
谢谢 使用TreeMap,其中键是元素名(a,b..),值是组(可以包含组号以及您需要了解的任何其他信息)
首先尝试定位该组。如果找不到,请创建一个新组并将其放入地图中。最后,只需迭代条目集即可打印键值对
我不会为您发布代码,因为这看起来像是一个家庭作业。我会使用列表
对于每一对,扫描您的组数组,以确定其中一对是否已在组中。如果是,则添加另一个
将一个或另一个对添加到组后,需要再次扫描,以查看添加的对是否存在于另一个组中。如果是,则必须合并这两个组
如果两个项目都没有找到,说明您有一个新组,请将这两个项目都添加到该组中,然后将其添加到列表中
此代码似乎有效:
a - group 1,
b - group 1,
c - group 1,
d - group 2,
e - group 2
你尝试过什么吗?看起来像是联合查找不相交集或深度优先搜索的工作。谢谢你的回复!我试图用arrayList by contains()方法实现这一点,但不幸的是,无法找到最佳解决方案。另外,我正在考虑通过创建一个表和使用SQL查询来使用JDBC实现这一点,但是我找不到合适的查询语句!为什么您需要JDBC(或数据库)来实现这一点?请更清楚地解释您想要什么。例如,如果有另一对“d b”,那么您希望打印什么?谢谢您的回复!一个问题:如果我使用树形图,每个元素都有唯一的组,对吗?因为正如您从文章中看到的,多个元素可以具有相同的组。最初,输入的同一行中至少有两个元素应映射到相同的组中。稍后,此组还将展开,以从其中一个成员已分配给该组的对中获取未分配的元素。谢谢!我认为代码中有错误。@ArmMiner-请描述错误-对我来说效果很好。可能我的eclipse有问题,错误如下:-添加的类的非法修饰符;只允许public、abstract和final——第25行:无法解析组——第46行:无法实例化HashSetah类型!好的,我只发布了相关代码。现在我已经发布了整个类。我使用的是Java7-如果使用的是Java--7,您可能需要在看到“”的地方调整泛型。
public class Test {
public static void main(String args[]) {
new Test().test();
}
// Might be better to use a LinkedList here.
List<Set<String>> groups = new ArrayList<>();
// Keeps track of what we added and where.
private static class Added {
final int where;
final String what;
public Added(int where, String what) {
this.where = where;
this.what = what;
}
}
// Add if allowed.
Added add(Set<String> group, int where, String has, String what) {
if (group.contains(has)) {
group.add(what);
return new Added(where, what);
}
return null;
}
void addPair(String a, String b) {
// Is ether of the strings in any of the existing groups.
Added added = null;
for (int i = 0; added == null && i < groups.size(); i++) {
Set<String> group = groups.get(i);
added = add(group, i, a, b);
if (added == null) {
added = add(group, i, b, a);
}
}
if (added != null) {
// Merge any now-joined groups.
for (int i = added.where + 1; i < groups.size(); i++) {
Set<String> group = groups.get(i);
if (group.contains(added.what)) {
// Join them.
groups.get(added.where).addAll(group);
groups.remove(group);
// There shouldn't be any more.
break;
}
}
} else {
// New group - May be better to use a TreeSet here for print order.
Set<String> group = new HashSet<>();
group.add(a);
group.add(b);
groups.add(group);
}
}
void printGroups(String title) {
System.out.println(title);
for (int i = 0; i < groups.size(); i++) {
System.out.println("Group " + (i + 1) + "=" + groups.get(i));
}
}
public void test() {
addPair("b", "a");
addPair("c", "b");
addPair("c", "a");
addPair("d", "e");
printGroups("Test-1");
addPair("d", "b");
printGroups("Test-2");
}
}
Test-1
Group 1=[b, c, a]
Group 2=[d, e]
Test-2
Group 1=[d, e, b, c, a]