⑴ 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鍵值對組成,具體放多少數據和你的伺服器運行時的內存有關系,同時也和你代碼中及時清理無效緩存有關系。
一般編寫代碼中不會去考慮放多少數據問題,除非你數據量超級大對內存要求比較高。這個時候需要對代碼和伺服器進行優化