Airbnb|Java基础之浅谈集合( 二 )



  • 这就是我们迭代器移动的原理 , 其实它使指在了两个元素中间进行移动的 。
for(Integer value:list) {
   System.out.println(value);//当然使用增强for循环 , 可谓是对我们集合非常的方便简洁 。

   Iterator<Integer> iter = list.iterator();
   //我们可以利用lambda表达式 。
   //直接调用forEachRemaining方法 。 (但是并不推荐使用此方法)
   iter.forEachRemaining(value-> System.out.println(list));

  • 对于Iterator接口还有一个remove()方法 , 见名知意删除 , 用法也没什么大区别 。
  • 具体的Collection方法可以查看API文档进行学习 , 在这里我不一一介绍了 。
  • boolean hasNext() 如果集合中还有元素 , 则返回true
  • E next() 返回迭代中的下一个元素
  • default void remove() 删除此迭代器返回的当前元素
  • default void forEachRemaining(Consumer<? super E> action) 对每个剩余元素执行给定的操作 。
二、List接口?2.1List接口的特点
  1. 对于前面的学习我们已经知道了 , 集合的两个基本接口为:Collection和Map 。
  2. List是一个有序集合 , 当我们使用List接口的实现类时 , 元素都是按顺序添加进来的 , 就跟我们的数组一样 。
  3. 同时List集合中可以添加重复的元素 , 每个元素有自己的下标 。
  4. 所以我们可以采用两种访问方式:①使用迭代器访问 ②使用整数索引(数组下标)来访问----->也称之为随机访问 。
  5. ListIterator接口时Iterator的一个子接口 , 这个接口可以让我们在使用迭代器遍历时 , 对元素进行操作 , 我们可以对元素进行增删改查操作 。
  6. List接口下面有三个实现类分别为: ArrayList 、 LinkedList 、 Vector  。
2.2ArrayList
  • ArrayList是用数组实现的 , 它支持动态扩容机制 。 当前数组是由默认构造方法生成的空数组并且第一次添加数据 。 此时minCapacity等于默认的容量(10)那么根据下面逻辑可以看到最后数组的容量会从0扩容成10 。 而后的数组扩容才是按照当前容量的1.5倍进行扩容 。
    优点:
  1. 根据下标遍历元素效率高
  2. 根据下标查询元素效率高
  3. 可以自动扩容
    缺点:
  4. 插入、删除元素效率低 。 数组所谓的删除元素其实都是覆盖 , 没有真正的删除