⑴ java 中的List 最大可以存放多少条数据
理论上来说 list和hashmap数据条是可以无限放的。。只要你的JVM的内存够。
还有一点,你可以直接用数据库来排序然后插入的。(简单的计算好像都可以)
⑵ java中的MAP、ArrayList最多能存储多少个对象
在向MAP和ArrayList加入对象时,会自动分配内存的。所以只要内存不溢出,就可以加入。
如果加入大量数据,最好在创建对象时分配比较大的空间,这样可以节省分配内存的时间。
⑶ java HashMap 最多放多少个key 不影响查询效率
与数量无关,HashMap读取性能主要取决于放入HashMap中的key对象的hashCode方法的实现,即此方法返回值导致的Hash冲突的比例,冲突越多,性能越差。
解释一下。楼上有人说HashMap时间复杂度为O(1),这是理想情况;说与值大小和堆大小相关……属于扯谈。java.util.HashMap的实现是一个标准的hash表+链表结构:
1. HashMap中持有一个数组成员变量table
2. table的每个元素都是一个链表(用于解决冲突)
3. 链表的每个元素Entry都存储着一对key/value
当执行HashMap.put(key, value)的时候:
1) HashMap会根据key.hashCode()方法来决定这一对key/value存储在数组table中的位置
2) 若那个位置上已经有一个链表(发生冲突),则接到链表尾端,否则作为链表头存储
那么当执行HashMap.get(key)的时候,查询过程也是一样的两步:
1) 根据key.hashCode()方法确定在table中的位置
2) 遍历所在位置的链表,若找到equals的key则返回,否则返回null
综上所述,第一步时间复杂度是O(1),第二步却是O(n)(n指链表长度)。所以key.hashCode()导致产生冲突的数量决定了这张HashMap的查询性能。
详细情况可以参见java.util.HashMap源码实现
⑷ redis map 存多少数据
设置redis.conf中的maxmemory选项,该选项是告诉Redis当使用了多少物理内存后就开始拒绝后续的写入请求,该参数能很好的保护好你的Redis不会因为使用了过多的物理内存而导致swap,最终严重影响性能甚至崩溃。
⑸ c++ map最多能存多少数据
std::map<Key_t, Mapped_t>::max_size()一般是size_t(-1) / sizeof(std::map<Key_t,Mapped_t>);
std::cout << std::map<std::string,int>().max_size() << '\n'; // 值可能和下面的值是一样的,
std::cout << size_t(-1) / sizeof(std::map<std::string,int>) << std::endl; // 值可能和上面的值是一样的。
起码在GCC里面max_size()就是这样写的:size_t(-1) / sizeof *this;
⑹ hashmap的最大容量是多少,在多少的时候会导致查询响应过慢
原则上,hashmap的插入和搜索,复杂度都是1,是非常快速的跟你的容量大小通常是没有直接关系的但是这是理想的情况。
这里说的理想,是在你所存储的对象的hashcode这个方法写的非常有效的情况下。根据hash的原理,存放一个对象是根据他的hashcode来计算的,如果没有哈希冲突,那么他的存储效率是最高,最完美的。
为什么哈希冲突会使得效率下降呢?
具体来分析,假设一个对象O1,他的hashcode算出来是1,另一个对象是O2,hashcode算起来也是1. 先放入O1对象,这时候速度很快,根据hashcode计算出来这个对象应该在哪个位置存放,然后直接放进去。但是到了放O2的时候,根据hashcode计算的地址存放,发现之前已经有O1了,那么显然是不能放的,因此就要采取些措施,比如,再计算一次,然后分配存放的地址(如果冲突,将继续,知道解决),一种最恶劣的情况下,很多很多的对象都存在hash冲突,那么重要就变得存储越来越慢。但是这个不是hashmap的责任,而是你的对象的hashcode方法没有定义好,使得冲突频繁
另外,哈希表为了避免这种冲突,会有一点优化。简单的说,原本可以放100个数据的空间,当放到80个的时候,根据经验,接下去冲突的可能性会更加高,就好比一个靶子上80%都是箭的时候你再射一箭出去,射中箭的可能性很大。因此就自动增加空间来减小冲突可能性。
80/100 = 0.8 这个0.8就是负载因子。
java中的hashmap的负载因子是0.75说了写理论。说这个的原因是想解释一下你的疑问“10000条的时候在搜索的时候很快,那么在多少条的时候可能导致效率下降呢”。这个答案是肯定的,就是存储的量跟存储效率没有直接的关系。
这页是hash表这个数据结构的优势所在
如果你觉得效率出现问题的时候,应该去关注一下你的存储对象的hashcode方法写的是否有问题
如果想更完美的解决效率问题,还可以手动指定hashmap的负载因子(用HashMap(int factor)这个构造方法),负载因子越低,冲突可能越小。但是牺牲的空间会相应增加
如果还是不能很好理解,可以先参看hash这个数据结构的特点,和JDK中HashMap的源代码,以及注释
学好java,数据结构是很重要的,理解原理的使用,跟生搬硬套的使用,不可同年而语
所以,去面试淘宝,腾讯,化为这种公司不会问你struts怎么用,只会问你struts怎么写。如同不会问你hashmap怎么用,而会问你hashmap的设计理念,和实现原理
希望对你有所帮助
⑺ java中map可以存放哪些信息
Map中“键、值“对均以对象的方式进行存储,像int、double等基本类型在加入泛型时要用其对应的包装类进行代替。
另外如果用TreeMap实现Map接口的话,如果存储的键类型为自定义类型的话,则要实现Comparable接口,并重写compareTo方法,否则无法进行键的排序。
⑻ 往hashMap里存储一万条数据会发生什么!
一般来讲哈希查找方法与数据量无关,在不碰撞的情况下为o(1)。但是真实情况不会这么理想,最坏情况也可能会达到o(N)级,所以我觉得影响哈希表检索效率的关键因素是哈希函数的选取,应尽量避免碰撞产生。
⑼ java中list最多可以存储多少条数据40万可以吗
上次我往一个map里添加了100万个对象,虚拟机大概用了1g内存
⑽ java map可以放多少数据
map由key value键值对组成,具体放多少数据和你的服务器运行时的内存有关系,同时也和你代码中及时清理无效缓存有关系。
一般编写代码中不会去考虑放多少数据问题,除非你数据量超级大对内存要求比较高。这个时候需要对代码和服务器进行优化