我想TreeMap用Java 创建一个自定义排序顺序.需要根据第二个字符对作为字符串的排序键进行排序.值也是字符串.
示例地图:
Za,FOO
Ab,Bar
Run Code Online (Sandbox Code Playgroud) 在Python 2.6中是否有内置的排序字典实现,或者哈希表是唯一的类型?
我正在使用字符串的TreeMap TreeMap<String, String>,并使用它来实现单词的Dictionay.
然后我有一个文件集合,并希望在字典定义的向量空间(单词空格)中创建每个文件的表示.
每个文件都应该有一个向量来表示它,具有以下属性:
所以我的想法是使用a Vector<Boolean>来实现这些向量.(这种表示集合中文档的方式称为布尔模型 - http://www.site.uottawa.ca/~diana/csi4107/L3.pdf)
我在创建这个向量的过程中遇到的问题是我需要一种方法来查找字典中单词的位置,如下所示:
String key;
int i = get_position_of_key_in_Treemap(key); <--- purely invented method...
Run Code Online (Sandbox Code Playgroud)
1)我可以在TreeMap上使用这样的方法吗?如果没有,你能不能提供一些代码来帮助我自己实现它?
2)TreeMap上是否有一个迭代器(它按字母顺序排列),我可以获得它的位置?
3)最终我应该使用另一个类来实现字典?(如果你认为使用TreeMaps我不能做我需要的)如果是的话,哪个?
提前致谢.
增加部分:
由dasblinkenlight提出的解决方案看起来很好,但是存在复杂性问题(由于将密钥复制到数组中而与字典的维度呈线性关系),并且不能接受为每个文件执行此操作的想法.
对我的问题还有其他想法吗?
有人能告诉我何时以及为何使用TREEMAP.我经历了这个链接, 但没有找到我的答案.
根据我的想法,我们使用treemap根据您的密钥获取数据,我们也可以通过其他方式实现.
我正在将我的Java代码库迁移到纯Scala,我仍然坚持使用这一段代码.我有一个让我们的IntervalMap即数据结构的实现你有效地映射范围[from,to]到values了哪里set,delete和get操作都O(log n)(从IntervalTree或线段树略有不同).
这段代码使用Java java.util.TreeMaps,在迁移到Scala时,我遇到了两个大问题:
Scala没有mutable.TreeMap- 我决定通过使用mutable.TreeSet(奇怪的是Scala mutable.TreeSet但没有mutable.TreeMap)来存储密钥并将值存储在辅助中mutable.Map.这是一个不愉快的黑客,但还有更好的方法吗?
接下来的问题是Scala的mutable.TreeSet没有类似的java.util.TreeSet的ceilingKey,floorEntry,pollFirst,pollLast这些都是O(log n)在Java操作.
那么,我怎样才能最好地将我的代码迁移到Scala?这些情况下的最佳做法是什么?我真的不想编写自己的树实现.有没有更惯用的Scala编写IntervalMaps的方式,我不知道?或者那里有一些有信誉的图书馆?或者Scala只是简单地用它的gimped TreeSet和不存在的TreeMaps来吸吮.当然,我可以TreeMap在Scala中使用Java ,但这很丑陋,我失去了所有不错的Scala集合功能,我不妨使用Java.
这是我目前的Java代码:https://gist.github.com/pathikrit/5574521
我有一个带有一组'Key和Value'对的TreeMap.如何在TreeMap的特定索引处同时获取Key和Value?
编辑:@ TO-ALL:谢谢.但我知道如何使用额外的ArrayList来实现它.我只是想到有没有办法实现这一点,而无需使用额外的ArrayList.
我需要显示Map使用<h:dataTable>.我的支持bean有Map如下属性:
public class Bean {
private Map<Integer,String> map; // +getter
@PostConstruct
public void init() {
map = new TreeMap<Integer,String>();
map.put(1,"Sasi");
map.put(2,"Pushparaju");
map.put(3,"Venkat Raman");
map.put(3,"Prabhakaran");
}
}
Run Code Online (Sandbox Code Playgroud)
然后在JSF页面中我试图将此Map属性绑定到的value属性<h:dataTable>.
<h:dataTable border="1" value="#{bean.map}" var="map">
<h:column id="column1">
<f:facet name="header">
<h:outputText value="UserId"></h:outputText>
</f:facet>
<h:outputText value="#{map.getKey}"></h:outputText>
</h:column>
<h:column id="column2">
<f:facet name="header">
<h:outputText value="Email Id"></h:outputText>
</f:facet>
<h:outputText value="#{map.getValue}"></h:outputText>
</h:column>
</h:dataTable>
Run Code Online (Sandbox Code Playgroud)
它给出了错误,getKey并且getValue不存在.我可以理解这不是正确的方法.我如何展示Map使用<h:dataTable>?
在我的作业中,我们从文件中读取文本:
成为或不成为:这就是问题:
在思想中是否更加高尚受苦
然后计算每次发生的次数.我已经能够打印这个未分类的地图,然后我能够制作一个TreeMap并以自然顺序打印它(如下所示).我不知道如何以相反的顺序打印.我知道一种使用比较器的方法,但我有点生疏,所以我尽我所能.此外,我不知道如何设置比较器以将Treemap排序为相反的顺序.
这是我打印未排序和自然排序的方法:
private static void sortPrintFrequencies(Map<String,Integer> vocabulary, PrintStream output {
Iterator iterator = vocabulary.keySet().iterator();
System.out.println("Unsorted");
while (iterator.hasNext()) {
String key = iterator.next().toString();
String value = vocabulary.get(key).toString();
String times = "times.";
String appears = "appears";
System.out.printf("%35s", key + " " + appears + " " + value + " "+ times);
System.out.println();
}
System.out.println("========================================");
System.out.println("SORTED NATURALLY BY KEY");
TreeMap newVocabulary = new TreeMap(vocabulary);
Iterator iterator2 = newVocabulary.keySet().iterator();
while (iterator2.hasNext()) {
String key = iterator2.next().toString();
String value = newVocabulary.get(key).toString(); …Run Code Online (Sandbox Code Playgroud) 我正在使用d3.js将动物家族(有机体)可视化(一次最多4000个)作为树形图,尽管数据源也可以是目录列表或命名空间对象列表.我的数据看起来像:
json = {
organisms:[
{name: 'Hemiptera.Miridae.Kanakamiris'},
{name: 'Hemiptera.Miridae.Neophloeobia.incisa'},
{name: 'Lepidoptera.Nymphalidae.Ephinephile.rawnsleyi'},
... etc ...
]
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:我正在尝试找到将上述数据转换为分层父/子数据结构的最佳方法,正如许多d3可视化(例如treemap)所使用的那样(对于数据示例,请参阅d3中的flare.json/examples/data/directory).以下是所需数据结构的示例:
{"name": "ROOT",
"children": [
{"name": "Hemiptera",
"children": [
{"name": "Miridae",
"children": [
{"name": "Kanakamiris", "children":[]},
{"name": "Neophloeobia",
"children": [
{"name": "incisa", "children":[] }
]}
]}
]},
{"name": "Lepidoptera",
"children": [
{"name": "Nymphalidae",
"children": [
{"name": "Ephinephile",
"children": [
{"name": "rawnsleyi", "children":[] }
]}
]}
]}
]}
}
Run Code Online (Sandbox Code Playgroud)
编辑:在ROOT节点内包含所有原始所需的数据结构,以便符合d3示例的结构,这些示例只有一个主父节点.
我希望了解一般的设计模式,作为奖励,我希望在javascript,php,(甚至是python)中看到一些解决方案.javascript是我的偏好.关于php:我实际使用的数据来自php脚本对数据库的调用,该脚本将结果编码为json.php脚本中的数据库结果是一个有序数组(见下文),如果这是基于php的答案的任何用途.
Array
(
[0] => Array
(
['Rank_Order'] => …Run Code Online (Sandbox Code Playgroud) treemap ×10
java ×6
dictionary ×2
python ×2
collections ×1
comparator ×1
d3.js ×1
datatable ×1
hashmap ×1
hierarchy ×1
iterator ×1
javascript ×1
jsf ×1
json ×1
python-2.6 ×1
scala ×1
sortedmap ×1
sorting ×1
string ×1
treeset ×1