Collection List Set Map 区别记忆

Collection List Set Map 区别记忆

转者注:关于 Java 中的集合,在这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用。以下是正文:

 

List 接口对 Collection 进行了简单的扩充,它的具体实现类常用的有 ArrayList LinkedList 。你可以将任何东西放到一个 List 容器中,并在需要时从中取出。 ArrayList 从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而 LinkedList 的内部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作。在具体应用时可以根据需要自由选择。前面说的 Iterator 只能对容器进行向前遍历,而 ListIterator 则继承了 Iterator 的思想,并提供了对 List 进行双向遍历的方法。

 

Set 接口也是 Collection 的一种扩展,而与 List 不同的是,在 Set 中的对象元素不能重复,也就是说你不能把同样的东西两次放入同一个 Set 容器中。它的常 用具体实现有 HashSet TreeSet 类。 HashSet 能快速定位一个元素,但是你放到 HashSet 中的对象需要实现 hashCode() 方法,它使用了前面说过的哈希码的算法。而 TreeSet 则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,这就用到了集合框架提供的另外两个实用类 Comparable Comparator 。一个类是可排序的,它就应该实现 Comparable 接口。有时多个类具有相同的排序算法,那就不需要在每分别重复定义相同的排序算法,只要实现 Comparator 接口即可。集合框架中还有两个很实用的公用类: Collections Arrays Collections 提供了对一个 Collection 容器进行诸如排序、复制、查找和填充等一些非常有用的方法, Arrays 则是对一个数组进行类似的操作。

 

Map 是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个 Map ,依次类推,这样就可形成一个多级映射。对于键对象来说,像 Set 一样,一个 Map 容器中的键对象不允许重复,这是为了保持查找结果的一致性 ; 如果有两个键对象一样,那你想得到那个键对象所对应的值对象时就有问题了,可能你得到的并不是你想的那个值对象,结果会造成混乱,所以键的唯一性很重要,也是符合集合的性质的。当然在使用过程中,某个键所对应的值对象可能会发生变化,这时会按照最后一次修改的值对象与键对应。对于值对象则没有唯一性的要求。你可以将任意多个键都映射到一个值对象上,这不会发生任何问题(不过对你的使用却可能会造成不便,你不知道你得到的到底是那一个键所对应的值对象)。 Map 有两种比较常用的实现: HashMap TreeMap HashMap 也用到了哈希码的算法,以便快速查找一个键, TreeMap 则是对键按序存放,因此它便有一些扩展的方法,比如 firstKey(),lastKey() 等,你还可以从 TreeMap 中指定一个范围以取得其子 Map 。键和值的关联很简单,用 pub (Object key,Object value) 方法即可将一个键与一个值对象相关联。用 get(Object key) 可得到与此 key 对象所对应的值对象。

 

下图为不同容器里元素是否有序与是否重复对照

 

有序否

允许元素重复否

Collection

List

Set

AbstractSet

HashSet

TreeSet

是(用二叉树排序)

Map

AbstractMap

使用key-value 来映射和存储数据,Key 必须惟一,value 可以重复

HashMap

TreeMap

是(用二叉树排序)

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值