Java集合个人理解

Java集合容器可分为两大类:

①Connection

Conllection提供了以下方法:

  • size():返回集合中的项数
  • isEmpty():判断集合是否为空
  • contains(Object):判断集合中是否包含某项
  • clear():清空
  • add(e):从集合中添加某项
  • remove():从集合中删除某项
  • iterator():遍历集合

Collection(java.util)继承Iterable:

Iterable:

  • 实现Iterable接口的类可以拥有增强for循环(foreach)
  • 实现Iterable接口的集合类必须提供一个名为Iterable()的方法,该方法的返回值为Iterable

Iterable()方法:

  • hasNext():是否存在下一项
  • next():获取下一项
  • remove():该方法可以删除由next()最新返回的项

 

下面有三个子类:List、Set以及Queue三个接口

List

  • 有序;可重复
  • List有两个子类:ArrayList、LinkedList
  • ArrayList调用get、set方法花费常数时间(非常短),所以比LinkedList查询快
  • LinkedList的插入和删除花费代价小,所以比ArrayList更适合做增删改

Set

  • 无序;无重复
  • Set有三个子类:HashSet、TreeSet、LinkedHashSet
  • HashSet:速度最快,没有明显的顺序保存元素
  • TreeSet:可按照比较结果的升序进行排序
  • LinkedHashSet:可按照插入的顺序进行排序

Queue

  • 先进先出

 

②Map

  • 以键值对存在,键唯一,值可重复;键只能有一个null,值可以有多个null;无序
  • Map有三个子类:HashMap、TreeMap、LinkedHashMap
  • HashMap:访问速度最快,没有明显的顺序保存元素
  • TreeMap:可按照比较结果的升序保存键
  • LinkedHashMap:按照插入顺序保存键,同时还保留HashMap的查询速度

 

一、Array和ArrayList的区别?

  • ArrayList是Array的复杂版本
  • Array只能存在相同数据类型的数据,而ArrayList可以存储不通数据类型的数据
  • Array的长度是固定的,而ArrayList的长度是可变的

二、ArrayList和LinkList的区别?

  • ArrayList调用get、set方法花费常数时间(非常短),所以比LinkedList查询快
  • LinkedList的插入和删除花费代价小,所以比ArrayList更适合做增删改

三、怎样将一个数组转成List?

  • 数组转list,可以使用Arrays.asList(数组)
  • List转数组,使用list.toArray()

四、Collection接口的remove()方法和Iterator接口的remove()方法区别?

性能

  • conllection的remove()方法先要从集合中找到要删除的项,找到该项的位置采用的是单链表接口查询,效率低
  • Iterator的remove()方法结合next()方法使用,每个一项删除一项,效率高

容错

  • 使用Iterator遍历时,如果使用Collection的remove会报遗产,因为Collection内的对象个数会改变而Iterator不会
  • 使用Iterator遍历时不会报错,因为Iterator内部的对象个数和原来集合中对象的个数会保持一致

五、List、Set、Map的区别?

  • List
  • 有序;可重复;可插入多个null值
  • Set
  • 无序;无重复;只能插入一个null值
  • Map
  • 以键值对存储,键唯一,值可重复;键只能有一个null,值可以有多个null;无序

六、HashSet、TreeSet、LinkedHashSet区别?

  • 需要速度快的集合,使用HashSet
  • 需要集合有排序,使用TreeSet
  • 需要按照插入的顺序存储集合,使用LinkedHashSet

七、HashMap、TreeMap、LinkedHashMap区别?

  • 在Map中插入、删除和定位元素,HashMap是最好的选择
  • 需要集合有排序功能,使用TreeMap更好
  • 需要按照插入的顺序存储集合,使用LinkedHashMap

八、HashMap和HashSet区别?

HashMap

  • 实现Map接口
  • 存储键值对
  • 调用put()向map中添加元素
  • 使用key计算hashcode
  • 相较于HashSet更快,因为使用唯一的键获取对象

HashSet

  • 实现了Set接口
  • 存储对象
  • 调用add()向set中添加元素
  • 使用成员对象计算hashcode
  • 相较于HashMap要慢

 

 

你可能感兴趣的:(Java集合个人理解)