容器

1、返回一个数组

    在C/C++中,不能直接返回一个数组,通常是返回一个指向数组的指针。这样维护数组的生命周期变得十分困难,并且容易造成内存泄露。

    但是在JAVA中,可以直接返回一个数组。而且不用关系数组是在哪儿创建的,什么时候需要销毁。

2、注意

    如果一个字符串频繁地被改变,请使用StringBuffer代替String,这样会大大地提高效率。

    equals比较方法是基于内容的,而==比较是基于内存地址的。

    在获取容器的迭代器之后,就不能再向容器中添加数据了。

3、容器

    JAVA的容器有两种基本类型:

    Collection:每个位置只能保存一个元素,如List和Set。

    Map:每个位置保存的是键值对,如HashMap。

4、迭代器

     迭代器将容器的类型和对容器的操作(添加、删除、修改)分离,也是一种设计模式。

    List list = new ArrayList();

    Iterator iter = list.iterator();

    while(iter.hasNext()) {

        iter.next();

        iter.remove();

    }

5、无意识中造成的递归

    假设我们要打印一个类的地址,通常我们会简单地使用this关键字来获取地址,如下:

    class Test {

        public String toString() {

            return "class Test address is:" + this + "\n";

        }

    }

    此时,如果创建一个Test类的对象,并打印它,会收到无穷无尽的异常。

    这是因为"class Test address is:" 和this相加时,编译器看到String对象后面跟着一个"+"号,而"+"号后面跟着的却不是一个String对象,于是编译器尝试将this转换为String类型。而此操作调用的是该类的toString方法,于是造成无限递归下去。

6、散列算法和散列码

    当Integer被用作Map的键时,它能够很好地工作,因为它具备"键"的所有性质。

    而当使用我们自定义的类作为键时,我们需要同时重载hashCode和equals方法。否则,如果此类没有基类,则会调用所有类的基类Object的hashCode方法(使用对象的地址)生成散列码。而且,Object中的equals方法也是比较两个对象的地址。所以需要同时重载hashCode和equals两个方法。

7、设置只读容器

    Map m = new HashMap();

    Collections2.fill(m, Collections2.geography, 25);

    m = Collections.unmodifiableMap(m);

    在将容器设为“只读”之前,必须填入有意义的数据。装载数据后,就应该使用"unmodifiable"方法返回的引用去替换掉原本的引用。 

8、多线程下的容器

    Map m = Collections.synchronizedMap(new HashMap());

    ConcurrentHashMap

    这样就可以保证同步。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值