Tag: hashmap

LinkedHashSet实现LRU

我想删除LinkedHashSet最老的成员,我知道有一个removeEldestEntry方法我必须覆盖( Java doc for removeEldestEntry ),但我想我必须定义initial capacity和load factor ,我不关心和我只想删除最近访问过的元素(这里通过访问我的意思是当它已经在集合中或被读取时被put ) 有没有办法不覆盖removeEldestEntry ?

在SQL数据库中存储HashMap

如何在SQL数据库中存储HashMap? 另外,如何将SQL数据库中的HashMap加载回HashMap实例? 好的,这就是我正在做的事情。 我有一个数据库来存储我的游戏的玩家数据。 它有一个包含用户名和密码的表。 每个玩家都有一个存储其属性的HashMap。 我需要将HashMap与其各自的用户一起存储在数据库中。

为什么我的HashMap允许重复键?

嘿,我正在使用HashMap来跟踪BulletinBoard上的服务和服务请求。 但是,我必须有哈希码并且等于错误,因为我得到了重复的密钥。 任何人都可以告诉为什么这可能是? keySet的内容: Services: [1, 1, 6, 6, 3] Requests: [8, 7, 6, 5, 8, 4, 5, 6, 2] 这是相关的代码: private static final HashMap services = new HashMap(); … public class Advert { private int id; private BoardPoster poster; public Advert(BoardPoster poster) { this.poster = poster; } public BoardPoster getPoster() { return poster; } […]

hashCode,实现以及与HashMap的关系

所以我在这里问了另一个相关的问题: 带有雪崩效应的java字符串哈希函数 ,但我现在有一个不同的相关问题。 我在那个问题中建立的是String的hashCode()函数没有雪崩效应。 这意味着,例如,如果我有字符串“k1”,“k2”,“k3”,并且我在每个上调用hashCode(),则返回的值将是连续的。 现在,基于我对数据结构101的回忆,我的印象是这是一件坏事。 因为假设HashMap通过算法选择桶,例如: class HashMap { private int capacity; private int chooseBucket(String key) { return key.hashCode() % capacity; } } 这意味着类似的密钥存储在连续的桶中,导致更高的冲突率,从O(1)降低大O查询时间到……谁知道有多糟糕……可能比O更差(log n )。 我在第一个问题中得到的答案类型是“这里不需要雪崩效应”,“它仅用于加密哈希函数”,而且“字符串的hashCode实现很快,适用于小型哈希映射”。 这让我很困惑。 当它们很小时,所有数据结构都很快。 Sun是否会提供一个适用于大型数据集的默认hashCode函数? 那时候HashMap的表现真的很重要,不是吗? 或者,我错过了什么? 请赐教。

在单个后台线程定期修改它的同时读取Map

我有一个类,我在updateLiveSockets()方法中每隔30秒从一个后台线程填充一个地图liveSocketsByDatacenter然后我有一个方法getNextSocket() ,它将由多个读者线程调用以获得一个可用的实时套接字获取此信息的相同地图。 public class SocketManager { private static final Random random = new Random(); private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); private final AtomicReference<Map<Datacenters, List>> liveSocketsByDatacenter = new AtomicReference(Collections.unmodifiableMap(new HashMap())); private final ZContext ctx = new ZContext(); // Lazy Loaded Singleton Pattern private static class Holder { private static final SocketManager instance = new SocketManager(); } […]

从java中的HashMap返回通配符匹配列表

我有一个Hashmap,可能在String中包含通配符(*)。 例如, HashMap students_; 可以将约翰*作为一把钥匙。 我想知道JohnSmith是否匹配student_中的任何元素。 我的字符串可能有几个匹配(John *,Jo * Smith等)。 有什么方法可以从我的HashMap中获取这些匹配的列表吗? 是否有另一个我可能正在使用的对象,它不需要我遍历我的集合中的每个元素,或者我是否必须将其吸取并使用List对象? 仅供参考,我的collections品中将包含少于200个元素,最终我想找到与最少量通配符匹配的对。

如何从java HashMap获取不可变集合?

我需要从java HashMap中获取一个集合,而不会在以后的集合中反映地图中的更改。 我想使用Collection.toArray()来实现这一点,但它不起作用。 结果Object []也在改变(javadocs说返回的数组将是“安全的”,因为此集合不会保留对它的引用)。 有任何简单的方法来实现这一目

为什么HashSet的内部实现会创建虚拟对象以在HashMap中作为值插入而不是插入空值?

HashSet是使用HashMap实现的,当我们向HashSet添加任何e1时,如果e1不在集合中,它会在HashMap中添加(e1,new Object())。 我的问题是为什么他们插入新的Object(),当他们可以插入像(e1,null),这是更优化的方法,因为没有创建新的对象。 在这里插入空值有什么缺点吗?

在Hashmap 中对Object的值进行排序

我想按对象的值对Hashmap进行排序。 在这种情况下,按国家/地区代码。 KEY OBJECT String LoyaltyCountry – country name – country code – country loc 我的代码如下: public static HashMap loyaltyCountrySortMap(HashMap loyaltyCountryMap) { if (loyaltyCountryMap != null) { List keys = new ArrayList(); keys.addAll(loyaltyCountryMap.keySet()); Collections.sort(keys, new Comparator() { public int compare(LoyaltyCountry o1, LoyaltyCountry o2) { return o1.getCountryName().compareTo(o2.getCountryName()); } }); } return loyaltyCountryMap; } 我该怎么做才能正确?

ConcurrentHashMap中的分段

我是Java世界的新手,我正在探索ConcurrentHashMap API,我在其中发现了这个: static final int DEFAULT_INITIAL_CAPACITY = 16; static final float DEFAULT_LOAD_FACTOR = 0.75F; static final int DEFAULT_CONCURRENCY_LEVEL = 16; static final int MAXIMUM_CAPACITY = 1073741824; static final int MAX_SEGMENTS = 65536; static final int RETRIES_BEFORE_LOCK = 2; final Segment[] segments; final Segment segmentFor(int paramInt) { return this.segments[(paramInt >>> this.segmentShift & this.segmentMask)]; } ConcurrentHashMap中分段的基本原理是什么以及使用它的原因是什么? 请详细说明细分概念。