java容器类总结(更新中。。)

来源:互联网 发布:中国网络暴力数据 编辑:程序博客网 时间:2024/06/03 21:08

基本概念

java 容器类库的用途就是‘保存对象’
- Collection。 一个对立元素的序列,这些元素都服从一条或多条规则
- List :按照插入的顺序保存对象
- Set:保存不重复的数据
- Queue:先进先出
- Map。一组成对的‘键值对’对象

List

  • ArrayList。基于动态数组的数据结构

长处:随机访问元素(get,set方法) 短处:中间插入和移除元素比较慢(add和remove方法)

  • LinkedList。基于链表的数据结构

长处:中间插入和移除元素速度快(add和remove方法) 短处:随机访问数据(get,set方法

迭代器(扩充)

Java的迭代器(Iterator)只能单向移动(ListIterator可以双向)Iterator用来:
- 使用方法iterator()要求容器返回一个Iterator
- 使用next()方法来获得序列中的下一个元素
- 使用hasNext()来判断序列中是否还有元素
- 使用remove将迭代器元素删除

只是遍历List,而不改变List对象本事,用foreach语法更佳简洁

Set

set不保存重复的数据,set最常被使用就是来测试归属性
- HashSet 数据是无序的
- TreeSet 会对插入的数据进行排序
- LinkedHashSet 保存插入的顺序

Map

Map是一种将对象与对象相关联的设计。HasMap设计用来快速访问,是无序的,TreeMap保持‘健’始终处于排序状态,LinkedHashMap保持插入的顺序。
- hashMap和hashTable的区别
- hashMap和hashTable都是集成于map,功能基本上可以等价
- hashMap是非synchronized,hashTable是synchronized,是线程安全的
- HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行

常见的面试题:

  • ArrayList和Vector的区别

    • Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。
    • 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。
  • hashMap和hashTable的区别

见上

  • 集合中键值对null值的允许

    • List:可以有多个null,可以有重复值
    • HashSet:能插入一个null(因为内部是以 HashMap实现 ),忽略不插入重复元素。
    • TreeSet:不能插入null (因为内部是以 TreeMap 实现 ) ,元素不能重复,如果待插入的元素存在,则忽略不插入,对元素进行排序。
    • HashMap:允许一个null键与多个null值,若重复键,则覆盖以前值。
    • TreeMap:不允许null键(实际上可以插入一个null键,如果这个Map里只有一个元素是不会报错的,因为一个元素时没有进行排序操作,也就不会报空指针异常,但如果插入第二个时就会立即报错),但允许多个null值,覆盖已有键值。
    • HashTable:不允许null键与null值(否则运行进报空指针异常)。也会覆盖以重复值。基于线程同步。
  • Iterator和ListIterator的区别是什么

    • Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。
    • Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。
    • ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引。
原创粉丝点击