备战BAT面试:查漏补缺——容器

备战BAT面试的学习记录,整理了最近自己查漏补缺的知识点,总结出来和大家分享,如有错误,欢迎指出!

备战BAT面试


容器

容器是我们保存对象的一种手段

说道保存对象,其实最简单的是数组,但是数组具有固定的尺寸。而通常来说,程序总是在运行时根据条件来创建对象,我们无法预知将要创建对象的个数以及类型,所以Java推出了容器类来解决这一问题。

两种不同概念的容器

  1. Collection,独立元素序列,这些元素都服从一条或多条规则。Collection包括List,Set以及Queue。
    -List必须按照顺序保存元素
    -Set不能有重复元素
    -Queue需要按照排队规则来确定对象的顺序。
  2. Map是键值对类型,允许用户通过键来查找对象。Hash表允许我们使用另一个对象来查找某个对象。

Collection代表的是单个元素对象的序列,(可以有序/无序,可重复/不可重复 等,具体依据具体的子接口Set,List,Queue等);Map代表的是“键值对”对象的集合(同样可以有序/无序 等依据具体实现)

注:这两个接口都不能直接被实现(意思就是不能直接继承Collection类,只能继承Collection的子接口,Map同理)。

Collection和Map的更多细节

Collection
  • 为什么要有集合?直接用数组不香吗?
    数组定长,无法像集合一样动态扩展;
    集合在增加、删除、修改操作上占有优势;

  • List

    • 特点:特点是有索引有序可重复
    • 常用方法:add();get();ListIterator();remove();set()
    • ArrayList类:数组实现,因为可以直接通过数组下标访问指定位置,所以查询和赋值操作速度快。但是修改元素效率低,线程不安全。
    • LinkedList类:双向链表的实现,可以高效操作元素因为可以直接通过修改Node节点中分变量,查询速度慢,操作不安全。
    • Vector:线程安全,效率低下
  • Set

    • 无序不可重复。

值得注意的是,无序是指按照哈希值来存的所以取数据也是按照哈希值取得,所以无序只是单纯表示不按照输入顺序,实际上是某种意义上的有序。不可重复的实现是经过对比对象的hashCode,如果对象的hashCode值不同那对象绝对不同。如果对象的hashCode值相同则用equals进行比较

Map

Map也是一个接口,一个map不能包含重复的key,每个key只能映射唯一一个value。

  • 常用方法:put();remove();clear();get();isEmpty();containsKey();containsValue()
  • HashMAP
    底层是哈希表数据结构,线程是不同步的,可以存入null键,null值。
  • LinkedHashMap
    该子类基于哈希表又融入了链表。
  • TreeMap
    底层是二叉树数据结构。可以对map集合中的键进行排序。需要使用Comparable或者Comparator 进行比较排序。
HashMap与HashSet的比较

HashSet实际是由HashMap实现的。然而我们只能向HashSet中添加Key,原因在于HashSet的Value其实都是同一个对象,这是HashSet添加元素的方法,可以看到辅助实现HashSet的map中的value其实都是Object类的同一个对象。

HashMapHashSet
实现Map接口实现Set接口
储存键值对仅存储对象
put()添加add()添加
直接使用Key来计算HashCode使用成员对象来计算,先比hashcode再用equals()
较快较慢
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值