Java 集合相关概念

集合

1、什么是集合? 对象类型的数组
2、定义了一个数组,数组的元素的类型引用数据类型
3、这种数组称为对象数组,数组每个元素其实都是一个对象的地址,而非对象本身。
  class Person{
    String name;
    int age;
  }
  Person[] persons = new Person[5];

4、集合的来源:数组的不足:

  无法扩展:数组的长度是固定的,一旦创建,就无法修改。
  结果:每一次进行扩展时都要把原来的数组进行复制到另一个更大的空间。
  解决:将对象类型的数组,变成某个类型的私有成员变量。对于数组的种种操作,都封装成公有的方法。
  集合就是数组的封装

5、集合和数组的区别

 1.共同点:
   都是用于存储数据的容器。可以更加方便统一管理数据。
 2.不同点:
  1.存储内容不同。
  数组既可以存在基本数据类型,也可以存储引用数据类型。必须是相同类型的元素
  集合只能存储引用数据类型。可以存储不同类型的元素。
 2.存储数量不同:
  数组的长度是不可变的,一旦确定大小就无法增删
  集合的长度是可变的,是一个可伸缩的容器
 3.方法不同:
  数组中只有Object定义的方法,以及一个length属性
  集合中可以有很多的方法。

6、集合的体系结构

7、Collection

 1.Collection是一个接口,不能创建对象,找一个实现类来调用方法。
 2.使用实现类ArrayList来调用接口中的方法。
 3.常用方法:
  boolean add(Object obj)
  boolean remove(Object o)
  void clear()
  boolean isEmpty()
  boolean contains(Object o)
  int size()
 4.Collection中带all方法
  addAll:把一个集合中的数据全部添加到另一个集合中
  containsAll:判断是否全部包含
  removeAll:删除两个集合的交集部分
  retainAll:保留两个集合的交集部分
 5.集合的遍历
  1.转成数组,通遍历数组的方式来间接的遍历集合
  Object toArray():可以把集合转变为数组
  2.迭代器
    爪子
  Iterator iterator()
  hasNext() :判断是否有下一个元素
  next():获取下一个元素

8、List
 1.是Collection的一个子接口
 2.特点:
  有序:每个元素都有自己的位置,不同位置是有分别的。
  有索引:每个元素都自己的编号。
  可以存放相同元素,即使用相同的元素,位置不同,也可以区分开来。
 3.特有方法
  add(int index, E element)
  remove(int index)
  set(int index, E element)
  get(int index)
 4.List集合的遍历(第三种遍历)
  siz() get(i)
 5.并发修改异常
  java.util.ConcurrentModificationException
  因为集合本身和迭代器都在操作集合,操作冲突。
  解决方式:要么全部使用集合操作,要么全部使用迭代器操作。
  ListIterator是Iterator的子接口,
  hasPrevious():判断是否有上一个元素
  previous() :获取上一个元素

9、Vector
 1.List只是一个接口,根据底层实现方式的不同,具有不同的实现类
  ArrayList:底层结构是数组,数组实现,顺序存储
  LinkedList:底层结构是链表,节点实现,链式存储
  Vector:底层结构是数组,数组实现,顺序存储
 2.Vector
  1.jdk1.0出现,jdk1.2被ArrayList替代。
  2.特点:
    线程安全,效率较低
    顺序存储,增删较慢
 3.特有遍历方式
  addElement(E obj)
  removeElement(Object obj)
  Enumeration<E> elements()
  boolean hasMoreElements()
  E nextElement()

10、ArrayList

  1.是List的一个实现类
  2.没有什么特别的方法
  3.存储方式  
    数组实现,顺序存储
    通过物理内存的位置关系,来表示描述逻辑顺序的相邻。

11、LinkedList

  1.是List的一个实现类
  2.存储方式
    节点实现,链式存储
    不通过物理内存位置的相邻来表示逻辑顺序的相邻
    每个元素都存储在一个节点中,节点除了元素数据本身之外,还需要存储下一个元素的内存地址。
  3.查询速度慢需要根据前面的节点来获取后一个节点的地址,前面所有的节点都访问一遍,节点数量多,查询速度较慢。
  4.增删速度极快,增删一个元素,只需要修改新增元素前后两个节点的引用域即可,与集合本身的元素个数无关。
  5.特有方法
   操作头部和尾部的特有方法
    addFirst(E e)
    addLast(E e)
    removeFirst()
    removeLast()
    getFirst()
    getLast()

猜你喜欢

转载自www.cnblogs.com/xfdhh/p/11185572.html
今日推荐