JAVA自学笔记(五) 容器

这部分对应Thinking in JAVA 3rd P379-P488部分,下面红字是我摘抄书中总结的部分,我觉得这个部分已经很好地总结了JAVA当中的容器,黑字部分是我自己的一些补充。

1. 数组将数字与对象联系起来。它保存类型明确的对象,查询对象时,不需要对结果做类型转换。它可以是多维的,可以保存基本类型的数据。但是,数组一旦生成,其容量就不能改变。
2.Collection保存单个的元素,而Map保存相关联的键值对。
3.像数组一样,List也建立数字与对象的关联,可以认为数组和List都是排好序的容器。List能够自动扩充容量。但是List不能保存基本类型,只能保存Object
的引用,因此必须对从容器中取出的Object结果做类型转换。
4.如果要进行大量的随机访问,就使用ArrayList;如果要经常从List中间插入或删除元素,则应该使用LinkedList。
5. 队列、双向队列以及栈的行为,由LinkedList提供支持。
6.Map是一种将对象与对象相关联的设计。HashMap着重于快速访问;TreeMap保持“键”始终处于排序状态,所以没有HashMap快。LinkedHashMap保持元素插入的顺序,也可以使用LRU算法对其重排序。
7. Set不接受重复元素。HashSet提供最快的查询速度,TreeSet保持元素处于排序状态。LinkedHashSet以插入顺序保存元素。
8.新程序中不应该使用过时的Vector、Hashtable和Stack。

 

 

1.记住,JAVA的容器保存的是OBJECT对象,即所有类的最初基类,因此一个容器当中所有的对象都能往里面放,这在一定程度上增加了一些不安全性,这个部分其实更欣赏CPP的模板做法,所以对于JAVA容器当中的东西取出来的时候最好是做一下RTTI的instanceof操作来确保取出来的就是你想要的东西。

2.JAVA不能重载操作符,因此不要指望ArrayList或者List提供一个像数组一样的[]来给你随机访问,对应的方法是get和set。

3.由于JAVA当中的容器只能保存OBJECT,这就意味着基本类型诸如int、boolean之类不能放入其中,要将基本类型放入其中的办法有两种,一种是使用JAVA提供的包装类,但是此方法的缺点是这些包装类在初始化后就变成了只读,如果你要修改容器当中存放的对象,那么用第二种方法;第二种方法是自己写一个类来对基本类型进行包装,这样就变成了既能读也能写了。

4.对于程序中常用的HashMap容器需要注意的是你放入到HashMap容器当中Key位置的东西除非是String否则必须重载这个类的hashCode和equels两个函数。因为hash的过程是调用对象的hashCode来计算hash值,然后根据这个hash值来找到hash表中的位置,然后在这个位置逐个调用equels函数比较存在在这个位置的对象是否相等(因为hash会冲突,所以hash表上同个位置会有多个对象)。OBJECT默认的hashCode是生成对象的地址,equels也是比较两个对象的地址,因此,在JAVA的对象都是引用的前提下如果不重写这两个函数必然导致hashMap的失效。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值