Tag: 键值

如何使用Spring将属性文件中的嵌套键值对加载到Java对象中?

我了解如何使用Spring和PropertyPlaceholderConfigurer在我们知道期望的属性时加载.properties文件,并使用@Value将这些值存储到变量或某个对象中。 但是,当密钥可以变化时,如何让Spring加载具有嵌套键,值对的属性文件? 例如,假设我有以下car.properties文件: Chevy=Corvette:String,1234567890:long,sportsCar:String Honda=Odyssey:String,2345678910:long,minivan:String Ford=F350:String,4567891011:long,truck:String 其中属性文件的每一行都有一个键是make,后面是三个嵌套的键值对,即一个用于模型,一个用于VIN,一个用于车辆类型,即: =:,:,: 我正在使用这种结构,因为将来会添加未来的车辆,我不想更改我的底层Java代码。 并且假设我想使用这些车辆属性生成一些关于车辆的随机数据以进行测试。 我如何使用Spring将属性文件的每一行加载为要存储在arraylist中的车辆值的集合? 我想我会有一个2D arraylist,其中每辆车都是“所有车辆”arraylist中的arraylist。 然后我会随机选择一个车辆arraylists来生成虚拟车辆数据。 无论如何,我认为我在正确的轨道上,但似乎无法弄清楚如何使用Spring加载我的嵌套键,值对。 有什么建议么? UPDATED context.xml对我有用: 顺便说一句,这是我正在使用的context.xml:

TreeMap object的get方法返回null值

import java.util.*; public class Sort { static class ValueComparator implements Comparator { Map base; ValueComparator(Map base) { this.base = base; } @Override public int compare(String a, String b) { if (base.get(a) >= base.get(b)) { return 1; } else { return -1; } } } public static void main(String[] args) { HashMap map = new HashMap(); […]

如何改变键值对?

我有一组值需要在需要时进行洗牌。 我不知道哪种变量类型最适合我。 数据实际上是基于键值结构。 100 “white” 200 “black” 300 “red” 就像那样。 我想要做的是根据我还不知道更改键值对,一些算法。但是它们需要像这样改组,但是洗牌需要不是随机的 ,所以我可以在需要时还原数据。 100 “red” 200 “white” 300 “black” 我真的不知道我的方法应该如何解决。 我应该使用HashTable还是其他东西,我该如何动态地将它们混洗? 任何帮助表示赞赏

Java项目:使HashMap(包括加载 – 存储)性能更好

我正在尝试为我们的服务器编写代码,我必须通过URL查找用户访问类型。 现在,在开始时,我们每天都会看到1亿个不同的URL。 现在,到那时它每天变成近6亿个不同的URL。 对于1亿,我们所做的是: 1)使用并行数组构建HashMap,其键是URL的一部分(表示为LONG),值是URL的其他部分(表示为INT) – 键可以有多个值。 2)然后搜索HashMap以查找访问的URL时间。 现在,随着HashTable变得越来越大,我们所做的就是: 1)构建两个/三个单独的HashTable,并加载和存储它(在通用文件系统上)以查找URL访问的次数。 现在,问题是, 1)虽然HashTable的性能相当不错,但是在加载/存储HashTable时代码需要更多时间(我们使用文件通道,加载/存储HashTable需要16-19秒 – 20000万条入口 – 加载因子为0.5) 我们要问的是: 1)有任何评论如何解决这个问题? 2)如何减少加载/存储时间(我之前问过但似乎文件通道是最好的方法)? 3)存储一个大的HashTable(超过内存)并重复缓存它将是一个很好的解决方案? 如果是这样,怎么做(至少一些指针)。 我们尝试使用 RandomAccessFile raf = new RandomAccessFile(“array.dat”, “rw”); IntBuffer map = raf.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, 1 << 30).order(ByteOrder.nativeOrder()).asIntBuffer(); 然而,比以前更糟糕的表现。 谢谢。 注意: 1)根据Stack Overflow之前的建议,我们使用一些像TokyoCabinet这样的NoSQL DB,但根据我们的经验,自定义HashTable比1亿个键值对提供更好的性能。 2)磁盘缓存的预读数据是不可能的,因为当系统启动时,我们的应用程序将开始工作,并在系统启动的第二天开始工作。 我们忘了提到的是: 1)由于我们的应用程序是项目的一部分并且应用于小型校园,因此我们假设访问的URL不超过8亿。 因此,您可以认为600/700数据值是固定的。 2)我们主要关心的是表现。 3)我们必须在本地运行我们的应用程序。 编辑:我们的hashmap代码可以在这里找到。

基于Java磁盘的键值存储

是否有基于文件系统的键值存储的高效Java实现,具有以下function: 通过唯一ID存储,覆盖和检索字节数组(可以由存储分配) 没有内存缓存(读取意味着从文件系统读取,写入意味着立即写入文件系统) 总数据量可达数TB 存储对象的数量高达数亿 可管理的文件系统对象数(在文件系统级别移动/复制/删除整个存储) Will Berkeley DB JE会吗?

获取与Map中相应最大值相关联的键(TreeMap / HashMap)

我编写了下面的代码,以找出在JAVA中使用TreeMap具有最大值(Integer)的键(String)。 public static void maxprofitItem(int[] costs, int[] prices, int[] sales,String[] items) { TreeMapmap=new TreeMap(); int[] profits=new int[items.length]; int maxvalue; for(int i=0;i0){ map.put(items[i],profits[i]); } } Set setOfKeys = map.keySet(); Iterator iterator = setOfKeys.iterator(); while (iterator.hasNext()) { String key = (String) iterator.next(); Integer value = (Integer)map.get(key); System.out.println(“Key: “+ key+”, Value: “+ value); } if(!map.isEmpty()){ System.out.println(“The maximum value […]

如何在Java中交换arrayMap值和键

我在逆转给定地图并将其反转的键和值存储到另一个地图时遇到了一些麻烦。 我有一个方法原型如下: public static Map<String, Set> reverse (Map <String, Set> graph); 因此,如果我有有向图的样本密钥,那么: {c -> arraySet{f, e}} {b -> d} {a -> arraySet{c, b}} {d -> g} {e -> d} {f -> arraySet{g, d}} 我需要有效地反转这个图,以便代替b – > d我有d – > b。 我认为所有这些要求对我来说是交换原始图中的值和键并将它们添加到reverseMap。 我想我可以迭代图中给定键的每组值,然后将它们存储在列表中。 不幸的是,我在实现这个问题时遇到了麻烦。 我真的很感激在正确的方向上轻推。

如何正确使用HashMap?

HashMap savedStuff = new HashMap(); savedStuff.put(“symbol”, this.symbol); //this is a string savedStuff.put(“index”, this.index); //this is an int 给我警告: HashMap is a raw type. References to generic type HashMap should be parameterized

你可以在Redis中使hashKey的键值对失效吗?

我想在redis中使用hashKey中的特定键/值对设置到期。 但redis会使整个hashKey失效,并且所有keyValue对都会丢失。 例如,我只想从seqNu中删除Key:666。 使用jedis.setex是另一种选择,但你不能在其中设置hashKey。 jedis.hset(“seqNu”,”666″,System.currentTimeMillis()+””); jedis.hset(“seqNu”,”777″,System.currentTimeMillis()+””); jedis.expire(“seqNu”, 20); // This expires the whole HashKey: seqNu after 20 seconds

Cassandra集群具有差的插入性能和插入稳定性

我必须每个客户每秒存储大约250个数值,每小时大约900k个数字。 它可能不是一整天的录音(可能每天5-10个小时),但我会根据客户端ID和读取日期对数据进行分区。 最大行长约为22-23M,仍然可以控制。 毫无意义,我的计划看起来像这样: CREATE TABLE measurement ( clientid text, date text, event_time timestamp, value int, PRIMARY KEY ((clientid,date), event_time) ); 密钥空间的复制因子为2,仅用于测试,snitch是GossipingPropertyFileSnitch和NetworkTopologyStrategy 。 我知道复制因子3是更多的生产标准。 接下来,我在公司服务器上创建了一个小型集群,三个裸机虚拟化机器,具有2个CPU x 2核心和16GB RAM以及大量空间。 我和他们在千兆局域网中。 群集基于nodetool运行。 这是我用来测试我的设置的代码: Cluster cluster = Cluster.builder() .addContactPoint(“192.168.1.100”) .addContactPoint(“192.168.1.102”) .build(); Session session = cluster.connect(); DateTime time = DateTime.now(); BlockingQueue queryQueue = new ArrayBlockingQueue(50, true); try { ExecutorService […]