我正在为这个程序使用Java,我目前有一种情况,我希望将键/值对添加到具有整数键的表中,例如
add (1, "Bobby")
add (6, "Sue")
add (3, "Mary")
add (8, "John")
add (15, "Joe")
Run Code Online (Sandbox Code Playgroud)
所以很自然地我想做一个类似哈希表的东西,但是当我进行查找时,如果找不到确切的值,我希望它返回最大的密钥,该密钥不大于请求的密钥.
所以例如,如果我查找7,它应该返回"Sue",但是如果我查找9,它应该返回"John"
我希望使用其中一个java util类(HashTable,TreeMap等),但我不太清楚如何做到这一点.
我正在开发一个基于d3.js的Treemap,http://mbostock.github.com/d3/ex/treemap.html ,我是D3的新手.基本上我有一个JSON文件的值列表,我正在创建一个基本的单父树形图,它在一个框中显示键,大小取决于键的值.
我遇到的问题是我想要解决的问题是我的数据往往偏向正确的高端,所以所有的大盒子都在那里结束,所有的小盒子最终都在左边.在我的脑海里(以及设计师的思想),既然我们从左到右阅读,那么在左边放置较大的盒子,在右边放置较小的盒子会更有意义.显然,我们的尺寸不需要改变,只需要改变它们的顺序.有关数据当前的显示方式,请参见http://chrislcoray.com/browsertest/treemap_issue.jpg.
例如,假设我的密钥是博客页面中的标签.我的JSON(不要问为什么我在博客中使用JSON,这是一个例子)可能看起来像这样:
{
"name": "tags",
"children": [
{"name":"cooking", "size": 35},
{"name":"video games", "size": 31},
{"name":"book club", "size": 26},
{"name":"knitting", "size": 23},
{"name":"hunting", "size": 22},
{"name":"farming", "size": 19},
{"name":"athletics", "size": 6},
{"name":"toys", "size": 3},
{"name":"sanitizer", "size": 3},
{"name":"pigs", "size": 2},
{"name":"ducks", "size": 2},
{"name":"wildlife", "size": 2},
{"name":"automobiles", "size": 1},
{"name":"waterbottles", "size": 1},
{"name":"telephone cords", "size": 1},
{"name":"lampshade hats", "size": 1}
]
}
Run Code Online (Sandbox Code Playgroud)
我的D3看起来像这样:
var jsonFeed = '/JSON/tags.json';
var width = jQuery('#container').width(),
height = jQuery('#container').height();
var …Run Code Online (Sandbox Code Playgroud) 在Java中.如何使用带有数字前缀的给定字符串对地图进行排序.我从属性文件中获取地图:
1_aaa=bla1
2_bbb=bla2
3_ccc=bla3
4_ddd=bla4
...
10_jjj=bla10
11_kkk=bla11
12_lll=bla12
Run Code Online (Sandbox Code Playgroud)
我从文件加载属性:
FileInputStream is =new FileInputStream(new File(filePath));
Properties prop = new Properties();
prop.load(is);
Run Code Online (Sandbox Code Playgroud)
之后:
SortedMap<Object, Object> sortedProperties new TreeMap<Object, Object>(prop);
现在使用TreeMap时 - >'10_jjj'是SortedMap中的第一个元素,我希望'1_aaa'成为第一个元素.
有任何想法吗?
谢谢
我有以下集合:
private Map <String, Staff> staff;
Run Code Online (Sandbox Code Playgroud)
实现为TreeMap:
staff = new TreeMap <String, Staff> ();
Run Code Online (Sandbox Code Playgroud)
我需要迭代这个映射中的值,但是当我尝试下面的代码时,我得到了一个不兼容的类型编译错误.我不明白为什么会这样; 我的地图中的值是Staff对象和
it.HasNext()
Run Code Online (Sandbox Code Playgroud)
应该将它们返回存储在staffMember变量中,这应该对我的知识很好?非常感谢.
Collection <Staff> staffList = staff.values();
Iterator it = staffList.iterator ();
while ((isJobAssigned = false) ||it.hasNext())
{
Staff staffMember = it.next();
if ((staffMember instanceof Typist) && (jobType.equalsIgnoreCase("Typist")))
{
newJob.setJobState ("Assigned");
staffMember.setState("Working");
return newJon.getJobNo() + " Staff allocated: " + staffMember.getName () + ", ID: " + staffMember.getId();
}
Run Code Online (Sandbox Code Playgroud) 我有这段代码:
private final static TreeMap<String, UserNotification> USER_NOTIFICATION_MAP = new TreeMap<String, UserNotification>();
//Filling the map using services
String idString = "1";
Iterator it = USER_NOTIFICATION_MAP.entrySet().iterator();
while (it.hasNext())
{
Map.Entry pairs = (Map.Entry)it.next();
idString = pairs.getKey().toString();
System.out.println(idString);
}
Run Code Online (Sandbox Code Playgroud)
对于具有以下对的地图:2 - UserNotification,3 - UserNotification,4 - UserNotification,5 - UserNotification,6 - UserNotification,7 - UserNotification,8 - UserNotification,9 - UserNotification,10 - UserNotification
代码输出为:10 2 3 4 5 6 7 8 9
考虑到TreeMap按键对所有数据进行排序,这怎么可能呢?我想值10的键应该在列表的末尾.
好消息:我可以使用树状图包创建一个漂亮的树状图。
forTm <- structure(list(
UnitGroup = c("1N", "BHU", "CSU", "ED", "Med/Surg", "Med/Surg", "Telemetry",
"Telemetry", "Telemetry", "Telemetry", "Telemetry"),
Unit = c("A", "B", "C", "ED", "D", "E", "F", "G", "H", "I", "J"),
Count = c(1L, 1L, 1L, 1L, 15L, 10L, 5L, 2L, 3L, 8L, 4L)),
class = c("data.frame"),
row.names = c(NA, -11L),
.Names = c("UnitGroup", "Unit", "Count"))
Run Code Online (Sandbox Code Playgroud)
library(treemap)
tm <- treemap(forTm,
index = c("UnitGroup", "Unit"),
vSize = "Count",
vColor = "Count",
type = "dens",
palette = "YlGnBu",
title = "# …Run Code Online (Sandbox Code Playgroud) 我试图得到一个TreeMap中键的所有值的集合,大于某个值,键.
代码尝试如下:
TreeSet<E> set = (TreeSet<E>)tMap.tailMap(key, false).values();
Run Code Online (Sandbox Code Playgroud)
有没有办法在Java中这样做?
谢谢!!
据我所知,listPython中是使用数组实现的,而deque使用双链表实现的。无论哪种情况,某个值的二分查找都需要 O(logn) 时间,但如果我们插入到该位置,数组需要 O(n),而双链表则需要 O(1)。
bisect那么,我们是否可以使用、 、insort和的组合deque来实现所有动态集合操作,并且时间复杂度可与 Java 中的 TreeMap 相媲美呢?
更新:我在这个Leetcode问题中测试了它:https ://leetcode.com/problems/time-based-key-value-store/submissions/
出乎我的意料,当我从 切换list到时deque,速度慢了很多。
我的目标是使用 TreeMap 使 Box 键对象按 Box.volume 属性排序,同时能够放置由 Box.code 不同的键。在 TreeMap 中不可能吗?
根据下面的测试 1,HashMap put 按预期工作,HashMap 保留了 A、B 键对象,但在测试 2 中,TreeMap put 不将 D 视为不同的键,它替换了 C 的值,请注意我使用了 TreeMap 比较器作为 Box.volume,因为我希望键在 TreeMap 中按体积排序。
import java.util.*;
public class MapExample {
public static void main(String[] args) {
//test 1
Box b1 = new Box("A");
Box b2 = new Box("B");
Map<Box, String> hashMap = new HashMap<>();
hashMap.put(b1, "test1");
hashMap.put(b2, "test2");
hashMap.entrySet().stream().forEach(o-> System.out.println(o.getKey().code+":"+o.getValue()));
//output
A:test1
B:test2
//test 2
Box b3 = new …Run Code Online (Sandbox Code Playgroud)