精华内容
下载资源
问答
  • package com.yang.generalType; import java.util.ArrayList; import java.util.List; public class TestGeneralType { /** * @param args */ public static void main(String[] args) { List l1 = new A

    package com.yang.generalType;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class TestGeneralType {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		List<String> l1 = new ArrayList<String>(){ //这一段应该属于内部匿名类的一个例子,也是初始化的一种方式。
    
    			/**
    			 * 
    			 */
    			private static final long serialVersionUID = 1L;
    			{
    				add("a");
    				add("b");
    				add(doSomething()):
    			}
    			String doSomething(){return "Do something";} //可以自定义一些方法。
    		};
    		
    		List<Integer> l2 = new ArrayList<Integer>();
    		List<Character> l3 = new ArrayList<Character>();
    		
    		l2.add(1);
    		l2.add(2);
    		
    		System.out.println(l1.getClass().getName());
    		System.out.println(l2.getClass().getName());
    		System.out.println(l3.getClass().getName());
    		System.out.println(l1.getClass() == l2.getClass());
    		System.out.println(l2.getClass() == l3.getClass());
    
    	}
    
    }
    


    不知道其中的原理,可以参考一个关于泛型的文章http://songfantasy.iteye.com/blog/977282。


    输出结果:

    com.yang.generalType.TestGeneralType$1
    java.util.ArrayList
    java.util.ArrayList
    false
    true

    展开全文
  • package ...import java.util.ArrayList;import java.util.List;public class TestGeneralType {/*** @param args*/public static void main(String[] args) {List l1 = new ArrayList(){ //这段应该...

    package com.yang.generalType;

    import java.util.ArrayList;

    import java.util.List;

    public class TestGeneralType {

    /**

    * @param args

    */

    public static void main(String[] args) {

    List l1 = new ArrayList(){ //这一段应该属于内部匿名类的一个例子,也是初始化的一种方式。

    /**

    *

    */

    private static final long serialVersionUID = 1L;

    {

    add("a");

    add("b");

    add(doSomething()):

    }

    String doSomething(){return "Do something";} //可以自定义一些方法。

    };

    List l2 = new ArrayList();

    List l3 = new ArrayList();

    l2.add(1);

    l2.add(2);

    System.out.println(l1.getClass().getName());

    System.out.println(l2.getClass().getName());

    System.out.println(l3.getClass().getName());

    System.out.println(l1.getClass() == l2.getClass());

    System.out.println(l2.getClass() == l3.getClass());

    }

    }

    不知道其中的原理,可以参考一个关于泛型的文章http://songfantasy.iteye.com/blog/977282。

    输出结果:

    com.yang.generalType.TestGeneralType$1

    java.util.ArrayList

    java.util.ArrayList

    false

    true

    展开全文
  • 关于集合,《阿里巴巴Java开发手册》中其实还有另外一个规定:本文就来分析一下为什么会有如此建议?如果一定要设置初始容量的话,设置多少比较合适?为什么要设置HashMap的初始化容量我们先来写一段代...

    集合是Java开发日常开发中经常会使用到的。在之前的一些文章中,我们介绍过一些关于使用集合类应该注意的事项,如《为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作》。

    关于集合类,《阿里巴巴Java开发手册》中其实还有另外一个规定:

    164f6fdebfbb519e7dcfe393cfa93fdd.png

    本文就来分析一下为什么会有如此建议?如果一定要设置初始容量的话,设置多少比较合适?

    为什么要设置HashMap的初始化容量

    我们先来写一段代码在JDK 1.7 (jdk1.7.0_79)下面来分别测试下,在不指定初始化容量和指定初始化容量的情况下性能情况如何。(jdk 8 结果会有所不同,我会在后面的文章中分析)

    public static void main(String[] args) { int aHundredMillion = 10000000; Map map = new HashMap<>(); long s1 = System.currentTimeMillis(); for (int i = 0; i < aHundredMillion; i++) { map.put(i, i); } long s2 = System.currentTimeMillis(); System.out.println("未初始化容量,耗时 : " + (s2 - s1)); Map map1 = new HashMap<>(aHundredMillion / 2); long s5 = System.currentTimeMillis(); for (int i = 0; i < aHundredMillion; i++) { map1.put(i, i); } long s6 = System.currentTimeMillis(); System.out.println("初始化容量5000000,耗时 : " + (s6 - s5)); Map map2 = new HashMap<>(aHundredMillion); long s3 = System.currentTimeMillis(); for (int i = 0; i < aHundredMillion; i++) { map2.put(i, i); } long s4 = System.currentTimeMillis(); System.out.println("初始化容量为10000000,耗时 : " + (s4 - s3));}复制代码

    以上代码不难理解,我们创建了3个HashMap,分别使用默认的容量(16)、使用元素个数的一半(5千万)作为初始容量、使用元素个数(一亿)作为初始容量进行初始化。然后分别向其中put一亿个KV。

    输出结果:

    未初始化容量,耗时 : 14419初始化容量5000000,耗时 : 11916初始化容量为10000000,耗时 : 7984复制代码

    从结果中,我们可以知道,在已知HashMap中将要存放的KV个数的时候,设置一个合理的初始化容量可以有效的提高性能。

    当然,以上结论也是有理论支撑的。我们HashMap中傻傻分不清楚的那些概念文章介绍过,HashMap有扩容机制,就是当达到扩容条件时会进行扩容。HashMap的扩容条件就是当HashMap中的元素个数(size)超过临界值(threshold)时就会自动扩容。在HashMap中,threshold = loadFactor * capacity。

    所以,如果我们没有设置初始容量大小,随着元素的不断增加,HashMap会发生多次扩容,而HashMap中的扩容机制决定了每次扩容都需要重建hash表,是非常影响性能的。

    从上面的代码示例中,我们还发现,同样是设置初始化容量,设置的数值不同也会影响性能,那么当我们已知HashMap中即将存放的KV个数的时候,容量设置成多少为好呢?

    HashMap中容量的初始化

    默认情况下,当我们设置HashMap的初始化容量时,实际上HashMap会采用第一个大于该数值的2的幂作为初始化容量。

    如以下示例代码:

    Map map = new HashMap(1);map.put("hahaha
    展开全文
  • 我看到一般人写Java里初始化静态常量都是 public static final Map DATA = new TreeMap(); static { DATA.put("a", "A"); //blah blah blah } 使用所在的static块来初始化DATA,其实还有另外种写法: ...

    这貌似是个不为人知的语言技巧。我看到一般人写Java里初始化静态常量都是

    public static final Map<String, String> DATA = new TreeMap<String, String>();
    
    static
    {
    
    DATA.put("a", "A");
    
    //blah blah blah
    }

    使用所在类的static块来初始化DATA,其实还有另外一种写法:

    public static final Map<String, String> DATA = new TreeMap<String, String>()
    {{
    
    this.put("a", "A");
    
    //blah blah blah
    
    }};
    这实际上是利用了匿名类的特性,内层的{是用来作匿名子类的构造函数,所以可以直接插入初始化代码,这个小语言技巧不常见,但是比较实用。

    展开全文
  • 一般Java的集合初始化如下带初始容量的mapMap map = new HashMap(4); 本意是希望给HashMap设置初始值, 避免扩容...guava里面有工具Maps,可以很方便的创建一个集合,并且,带上合适的大小初始化值。具体如下:
  • 最近使用到了map,以前在.net里面是类似dictionary的java一个实现是hashmap。但是这个的初始化远没c#语法来的方便,所以找了找最快捷的初始化方式: 1 public static HashMap<Integer, Integer> ...
  • A工具类的静态方法通过B工具类的静态方法赋值,但是执行时候报了一个找不到B类中对应的方法错误,导致调用A类里的方法时抛出A类初始化失败,未找到A类异常。由于是class文件,当时看了半天,也没发现那里不对,方法...
  • ThreadLocal的重写初始化方法

    千次阅读 2019-04-11 09:30:11
    重写初始化方法使用,使其能够创建默认初始值 用一个内部重写他的init方法 import java.util.HashMap;... //让ThreadLocal里面有一个默认的即在初始化时 new 出来 protected final static ThreadLo...
  • 静态初始化类成员

    2017-11-21 00:46:00
    某些情况下,在写C++的时候,希望能通过一个静态初始化函数来对的一些静态成员进行初始化。... 如果要初始化一个普通的静态成员,只需要在实现文件(源文件)中定义该成员并赋予初始值即可,比如: ...
  • 成员变量数组初始化方法解析

    千次阅读 2010-09-16 20:41:00
    某些情况下,在写C++...  如果要初始化一个普通的静态成员,只需要在实现文件(源文件)中定义该成员并赋予初始值即可,比如:class Test1 { public:  static string emptyString; };
  • 静态成员变量的初始化,vector类型变量初始化 Posted on 2008-11-24 16:28 浪端之渡鸟 阅读(1620) 评论(0)编辑收藏...  如果要初始化一个普通的静态成员,只需要在实现文件(源文件)中定义该成员并赋予初始
  • 静态容器变量初始化

    千次阅读 2012-09-19 08:37:51
    某些情况下,在写C++的时候,希望能通过一个静态初始化函数来对的一些静态成员... 如果要初始化一个普通的静态成员,只需要在实现文件(源文件)中定义该成员并赋予初始值即可,比如: class Test1 { publ
  • vector 静态成员变量的初始化

    千次阅读 2014-03-14 16:05:51
    某些情况下,在写C++的时候,希望能通过一个静态初始化函数来对的一些静态成员进行... 如果要初始化一个普通的静态成员,只需要在实现文件(源文件)中定义该成员并赋予初始值即可,比如: class Test1 { publ
  • 某些情况下,在写C++的时候,希望能通过一个静态初始化函数来对的一些静态成员进行初始化。比如,往静态的std::map成员或者std::vector成员添加一些固定的内容等。... 如果要初始化一个普通的静
  • 6.2.1 在中给每个变量一个初始值 147 6.2.2 定义自己的引用 147 6.2.3 使用点操作符的技巧 148 6.2.4 的数组 149 6.3 小结:Java其实是个和对象的世界 152 6.4 习题 153 第7章 Java中的方法——给汽车...
  • 6.2.1 在中给每个变量一个初始值 147 6.2.2 定义自己的引用 147 6.2.3 使用点操作符的技巧 148 6.2.4 的数组 149 6.3 小结:Java其实是个和对象的世界 152 6.4 习题 153 第7章 Java中的方法——给汽车...
  • 6.2.1 在中给每个变量一个初始值 147 6.2.2 定义自己的引用 147 6.2.3 使用点操作符的技巧 148 6.2.4 的数组 149 6.3 小结:Java其实是个和对象的世界 152 6.4 习题 153 第7章 Java中的方法——给汽车...
  • 疯狂JAVA讲义

    2014-10-17 13:35:01
    学生提问:既然内部是外部的成员,是否可以为外部定义子类,在子类中再定义一个内部来重写其父中的内部? 211 6.7.4 局部内部 211 6.7.5 匿名内部 212 6.7.6 闭包(Closure)和回调 215 6.8 ...
  • java面试宝典

    2013-02-28 16:04:01
    42、一个“.java”源文件中是否可以包含多个(不是内部)?有什么限制? 12 43、说出一些常用的,包,接口,请各举5 个。 12 44、Anonymous Inner Class (匿名内部) 是否可以extends(继承)其它?是否可以...
  • java 面试题 总结

    2009-09-16 08:45:34
    Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,...
  • Java中用接口消除if else

    千次阅读 2019-02-11 11:33:36
    Spring中用InitializingBean来消除if else ...首先很正常的是我们利用一个接口把各个模块的功能代码写入到各自的实现里面,并且各个实现里面定义好一个标识,最后通过初始化把各个实现通过map的形式 标...
  • Java容器的用途是保存对象(实际上只是保存对象的引用变量,但通常习惯上认为容器保存的是对象),其主要由以下两个接口派生而出:Collection 和 Map 。 Collection 一个独立元素的序列,这些元素都服从一条或者...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    给定一个C语言函数,要求实现在java类中进行调用。 45.如何获得数组的长度? 46.访问修饰符“public/private/protected/缺省的修饰符”的使用 47.用关键字final修饰一个类或者方法时,有何意义? 48.掌握类和...
  •  Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,...
  • 21天学通Java-由浅入深

    2011-06-06 09:59:14
    191 10.1 什么是构造器 191 10.1.1 构造器的使用 191 10.1.2 被修饰的构造器 193 10.1.3 构造器方法与普通方法的区别 196 10.2 如何实例化一个对象 197 10.3 构造器的使用 199 10.3.1 构造器的调用 199 10.3.2 构造...

空空如也

空空如也

1 2 3 4
收藏数 75
精华内容 30
关键字:

java类里初始化一个map

java 订阅