Ⅰ java中HashMap初始容量问题
这个问题可以跟踪一下HashMap的源码就知道了,根据输入的初始化容量(门槛?)的值(先了解HashMap中容量和负载因子的概念,其实这个和HashMap确定存储地址的算法有关),先判断是否大于最大容量,最大容量2的30次方,1<<30 =(1073741824),如果大于此数,初始化容量赋值为1<<30,如果小于此数,调用tableSizeFor方法 使用位运算将初始化容量修改为2的次方数,都是向大的方向运算,比如输入13,小于2的4次方,那面计算出来桶的初始容量就是16.
publicHashMap(intinitialCapacity){
this(initialCapacity,DEFAULT_LOAD_FACTOR);
}
/**
*Constructsanempty<tt>HashMap</tt>withthespecifiedinitial
*capacityandloadfactor.
*
*@
*@paramloadFactortheloadfactor
*@
*ortheloadfactorisnonpositive
*/
publicHashMap(intinitialCapacity,floatloadFactor){
if(initialCapacity<0)
("Illegalinitialcapacity:"+
initialCapacity);
if(initialCapacity>MAXIMUM_CAPACITY)
initialCapacity=MAXIMUM_CAPACITY;
if(loadFactor<=0||Float.isNaN(loadFactor))
("Illegalloadfactor:"+
loadFactor);
this.loadFactor=loadFactor;
this.threshold=tableSizeFor(initialCapacity);
}
/**
* Returns a power of two size for the given target capacity.
*/
static final int tableSizeFor(int cap) {
int n = cap - 1;
n |= n >>> 1;
n |= n >>> 2;
n |= n >>> 4;
n |= n >>> 8;
n |= n >>> 16;
return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
}
Ⅱ java遍历Map的几种方法分析
1.先初始化一个map
public class TestMap {
public static Map<Integer, Integer> map = new HashMap<Integer, Integer>();
}
2.keySet values
如果只需要map的key或者value,用map的keySet或values方法无疑是最方便的
// KeySet 获取key
public void testKeySet() {
for (Integer key : map.keySet()) {
System.out.println(key);
}
}
// values 获取value
public void testValues() {
for (Integer value : map.values()) {
System.out.println(value);
}
}
3.keySet get(key)
如果需要同时获取key和value,可以先获取key,然后再通过map的get(key)获取value
需要说明的是,该方法不是最优选择,一般不推荐使用
// keySet get(key) 获取key and value
public void testKeySetAndGetKey() {
for (Integer key : map.keySet()) {
System.out.println(key + ":" + map.get(key));
}
}
4.entrySet
通过对map entrySet的遍历,也可以同时拿到key和value,一般情况下,性能上要优于上一种,这一种也是最常用的遍历方法
// entrySet 获取key and value
public void testEntry() {
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
5.Iterator
对于上面的几种foreach都可以用Iterator代替,其实foreach在java5中才被支持,foreach的写法看起来更简洁
但Iterator也有其优势:在用foreach遍历map时,如果改变其大小,会报错,但如果只是删除元素,可以使用Iterator的remove方法删除元素
// Iterator entrySet 获取key and value
public void testIterator() {
Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Integer, Integer> entry = it.next();
System.out.println(entry.getKey() + ":" + entry.getValue());
// it.remove(); 删除元素
}
}
Ⅲ map string string 怎么初始化
我也给你一个例子
import java.util.Map;
public class EnvMap {
public static void main (String[] args) {
Map<String, String> env = System.getenv();
for (String envName : env.keySet()) {
System.out.format("%s=%s%n", envName, env.get(envName));
}
Ⅳ java hashmap怎么初始化
HashMap 是一种常用的复数据结构制,一般用来做数据字典或者 Hash 查找的容器。普通青年一般会这么初始化:
HashMap<String, String> map = new HashMap<String, String>();
map.put("name", "test");
map.put("age", "20");
看完这段代码,很多人都会觉得这么写太啰嗦了,文艺青年一般这么来了:
HashMap<String, String> map = new HashMap<String, String>() {
{
map.put("name", "test");
map.put("age", "20");
}
};
Ⅳ 我在JAVA里面写了一个list合集,我想要用map类型初始化list里面的东西
HashMap<String, Integer> hm = new HashMap<String, Integer>();
hm.put("", 0);
没怎么看懂问题, 你的TestLzp 是自定义类专,构造器属是(String,Integer)吧,
Ⅵ 关于JAVA MAP怎么初始化生成
首先你要理解 Map的基本结构,key-value
这里最外层的Map,key是类型,value是ArrayList。ArrayList里面放得又是Map,这个Map的key是String,value也是String。
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.Map;
publicclassTest{
publicstaticvoidmain(String[]args){
Map<String,ArrayList<Map<String,String>>>topMap=newHashMap<>();
Stringkey1="map_key1";//topMap的第一个key
ArrayList<Map<String,String>>value1=newArrayList<>();//topMap的第一个value
//start
Map<String,String>strMap=newHashMap<>();
strMap.put("hello","你好");
strMap.put("thanks","谢谢");
value1.add(strMap);
value1.add(newHashMap<>());//添加一个空的Map
//end
topMap.put(key1,value1);//放入topMap
//以上start到end段的代码是在往value1的ArrayList中填充数据
//不填充也可以放入到topMap中,就像下面这样
topMap.put("emptyList",newArrayList<Map<String,String>>());
topMap.put("emptyList2",newArrayList<>());//jdk1.7及之后推荐这样写,省掉泛型描述。前面的newHashMap<>()、newArrayList<>()也是省掉了
}
}
Ⅶ java中private Map<String,List<实体>> names=null; 这样调用的时候会出现空指针异常,求如何初始化
1.因为你只是 声明了一个对象啊,可以理解为一个虚拟的东东,也可以理解为一个遥控器,此时未给他匹配一个电视机,那么你操作遥控器有作用么?
2.只有创建(new)了以后,才给这个对象分配内存, 这时候就是一个具体的东东,你才能使用他. 此时给他指定了一个电视机,那么你就可以操作遥控器了,而且效果很好.
3.java里创建对象很简单, 就是用new
4.你的这个可以写成
names = new HashMap<String,List<实体>>();
5.谁说private 不能new了?
Ⅷ map<string,string>在c99中怎么初始化,或者说怎么赋值
map<string,string>mymap;
//添加元素
mymap.insert(pair<string,string>("haha","hehe"));
mymap.insert(map<string,string>::value_type("haha","hehe"));
mymap["haha"]="hehe";
参考代码如下:
#include<iostream>
#include<map>
usingnamespacestd;
intmain()
{
typedefmap<string,string>::iteratorm_itor;
map<string,string>mymap;
mymap["223"]="adflijd";
mymap.insert(pair<string,string>("235dadf","sdflisha"));
mymap.insert(map<string,string>::value_type("dlfkja","ajefoi"));
for(m_itorit=mymap.begin();it!=mymap.end();it++)
cout<<it->first<<""<<it->second<<endl;
return0;
}
运行结果如下:
Ⅸ 关于java map 初始化,遍历,排序的几个解答
Map接口同Set接口和List接口有所不同,Map接口是通过键值对来存储元素的,存储元素时需要提供一个键值(Key),键值不能重复,查询元素时也需要提供键值(Key),类似于地址中的街道门牌号,通过门牌号确定唯一的地址。Map接口有多个实现类,分别是HashMap、LinkedHashMap、TreeMap、Propeties。
因为Map存储的是键值对,因此不能用迭代器、foreach等方法遍历Map。如果需要遍历Map时,可以通过Map的keySet方法返回HashMap中key值的集合,通过遍历Key值集合读取HashMap中的元素。
摘自Map接口及其实现类