博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java_简单解析ArrayList_iterable
阅读量:4320 次
发布时间:2019-06-06

本文共 2560 字,大约阅读时间需要 8 分钟。

文章目录

用java实现栈 和队列,,并查看java源码

动态数组容器ArrayList(泛型容器)

1. 对于主要方法,不在这赘述

2. 基本原理

  1. 对于基本原理类似于 动态数组DynamicArray
public class DynamicArray
{
private static final int DEFAULT_CAPACITY = 10; private int size; private Object[] elementData; public DynamicArray(){
this.elementData = new Object[DEFAULT_CAPACITY]; } /** * 首先确保,空间是满足的 * @param minCapacity */ private void ensureCapacity(int minCapacity){
int oldCapacity = elementData.length; if (oldCapacity >= minCapacity){
return; } int newCapacity = oldCapacity * 2; if (newCapacity < minCapacity){
newCapacity = minCapacity; } elementData = Arrays.copyOf(elementData,newCapacity); } public void add(E e){
ensureCapacity(size +1); elementData[size++] = e; } public E get(int index){
return (E)elementData[index]; } public int size(){
return size; } public E set(int index,E element){
E oldValue = get(index); elementData[index] = element; return oldValue; }}

3. 在ArrayList 的接口 实现 了迭代的接口(Iterable)

  1. 实现了迭代就可以使用更加的简化的foreach 语法,
  2. iterable 和 iterator 是不一样的,
    1. Iterable 表示 对象可以被迭代,他有一个方法iterator 返回iterator对象,实际是对iterator接口的方法进行遍历
    2. 如果对象实现了iterable,就可以创建foreach语法
    3. 类可以不实现iterable ,也可以创建iterator 对象
  3. 迭代的陷进
    1. 就是 不能在迭代的过程中调用容器的删除方法
      public void remove(ArrayList
      list){
      for(Integer a :list){
      if(a <= 100){
      list.remove(a); } }}
    2. 但是如果改成 这样 ,就不会报错
      public void remove(ArrayList
      list){
      for(Integer a :list){
      if(a <= 100){
      list.remove(); } } }
    3. ArrayList 的迭代原理
      public ListIterator
      listIterator(int index) { if (index < 0 || index > size) throw new IndexOutOfBoundsException("Index: "+index); return new ListItr(index); }
    4. 使用迭代器 表示的是一种关注点分离的思想,将数据的实际组织方式与数据的迭代遍历相分离,这是一种常见的设计模式

4. ArrayList实现的接口

  1. 三个主要的接口: collection, List, RandomAccess

1. collection

  1. 表示一个数据集合,数据间没有位置和顺序的概念
  2. 主要的方法 可以通过点击查看源码,更加有深刻的认识

2. List

  1. 表示有顺序或位置的数据集合,它更是扩展了Collection

3. RandomAccess

  1. 这个定义是空的
    public iterface RandomAccess{
    }
  2. 这种没有任何代码的接口在java 中被称为标记接口,用于声明类的一种属性
  3. 这里实现,接口表示,可以随机访问,可随机访问就是具备类似数组那样的特性

5. 总结ArrayList

  1. 对于ArrayList 他的特点就是内部采用动态随机数组实现,
    1. 可以随机访问,按照索引位置进行访问效率高,O(1)
    2. 除非数组已经排序,不然按照内容排序,效率低O(n)
    3. 添加N个元素的效率为O(n)
    4. 插入和删除元素的效率比较低,因为要移动元素O(n)

转载于:https://www.cnblogs.com/YJBlog/p/10815080.html

你可能感兴趣的文章
Alpha 冲刺(3/10)
查看>>
Kaldi中的Chain模型
查看>>
spring中的ResourceBundleMessageSource使用和测试示例
查看>>
css规范 - bem
查看>>
电梯调度程序的UI设计
查看>>
转自 zera php中extends和implements的区别
查看>>
Array.of使用实例
查看>>
【Luogu】P2498拯救小云公主(spfa)
查看>>
如何获取网站icon
查看>>
几种排序写法
查看>>
java 多线程的应用场景
查看>>
dell support
查看>>
转:Maven项目编译后classes文件中没有dao的xml文件以及没有resources中的配置文件的问题解决...
查看>>
MTK android 设置里 "关于手机" 信息参数修改
查看>>
单变量微积分笔记6——线性近似和二阶近似
查看>>
补几天前的读书笔记
查看>>
HDU 1829/POJ 2492 A Bug's Life
查看>>
CKplayer:视频推荐和分享插件设置
查看>>
CentOS系统将UTC时间修改为CST时间
查看>>
redis常见面试题
查看>>