java.lang 接口 Iterable<T>

java.util 接口 Collection<E>     父接口是  Iterable<T>

集合中的元素是否可以重复?     ------ 有些可以,有些不可以
   集合中的元素是否有顺序?       ------有些是有序的,有些是无序的

Collection<E>  的子接口  :
         java.util  接口 List<E>
         java.util  接口 Set<E>
         java.util  接口 Queue<E>

java.util 接口 List<E>    : 有序的 collection
            E get(int index)                       返回列表中指定位置的元素
            E remove(int index)                    移除列表中指定位置的元素(可选操作)。
            void add(int index, E element)         在列表的指定位置插入指定元素(可选操作)。
 
   
List接口的实现类: ArrayList 、LinkedList、Stack、Vector

java.util  类 ArrayList<E>  : List 接口的大小可变数组的实现 (1.ArrayList的底层实现是静态数组  2.数组的大小可变)
           int[] ages = new int[10];
           Dog[] dogs = new Dog[10];                        
       
      提问:静态数组的大小是如何实现变化的?
            dogs[10] = new Dog("晶晶");     ---------会出现数组下标越界的异常
            dogs = new Dog[20];           ------ 重新分配内存,把原有数据拷贝的新内存中

ArrayList()
          构造一个初始容量为 10 的空列表   
       ArrayList(int initialCapacity)
          构造一个具有指定初始容量的空列表

ArrayList初始容量的分配原则:既不要出现频繁的内存重新分配,也不要有太多的内存浪费,这样最好!      
        Collection<Student> stus = new ArrayList<Student>(60);

ArrayList的底层实现是Object[]
         private transient Object[] elementData;

参考:构造函数之间的相互调用
                public ArrayList(int initialCapacity) {
    super();
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        this.elementData = new Object[initialCapacity];
         }

public ArrayList() {
       this(10);
         }

public boolean add(E e) {
         ensureCapacity(size + 1);  // Increments modCount!!
         elementData[size++] = e;
         return true;
         }

ArrayList内存重新分配的原则: int newCapacity = (oldCapacity * 3)/2 + 1;

用三种方法,遍历List集合:      
        for(int i=0;i<stus.size();i++){
            System.out.println(stus.get(i).getName());
        }
        Iterator<Student> it = stus.iterator();
        while(it.hasNext()){
            Student stu = it.next();
            System.out.println(stu.getName());
        }
        for(Student stu : stus){
            System.out.println(stu.getName());
        }

提问: 从ArrayList中移出某个元素后,会发生什么?
         E remove(int index)                    移除列表中指定位置的元素(可选操作)。

移除此列表中指定位置上的元素。向左移动所有后续元素(将其索引减 1)。
         remove方法会产生内存的重新分配: System.arraycopy(elementData, index+1, elementData, index,numMoved);

结论:
            ArrayList的数据结构的特点是查询检索元素的速度非常快!
                       当ArrayList中的数据出现插队或移出时,性能会受到很大的影响!

数据结构的特点,决定了它的使用场景:如从数据库中提取数据,然后进行展示、但不修改,这种情况性能最好!

Object 的 hashCode()
     在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数
     两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果

中软第八天学习笔记之ArrayList相关推荐

  1. 帆软报表开发学习笔记(八)

    `帆软报表开发学习笔记` 报表特性_超级链接(20200928) 报表特性_条件属性(20200929) 报表特性_导出(20200930) 报表特性_打印(20201001) 报表特性_编码专题(2 ...

  2. 中软国际实习学习第九天

    中软国际实习学习第九.十天 第九天我们实现的是新闻系统的登录的功能,以及在登录功能中间添加一个过滤器 package com.zhongruan.entity;import javax.persist ...

  3. 数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一)

    数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一) 步骤: 1. 创建SILVERLIGHT应用程序 2. 创建LINQ TO SQL [注意序列化的问题 ...

  4. C++ 中 参数包 (typename ...) 学习笔记

    C++ 中 参数包 (typename -) 学习笔记 本文所属地址 https://www.lucien.ink 起因 突然好奇 STL 的 std::tuple 是怎么实现不定参数的,遂搜了搜,发 ...

  5. web前端分享HTML5中的nav标签学习笔记

    好程序员web前端分享HTML5中的nav标签学习笔记,nav标签全称navigation,顾名思义,是导航的意思.根据HTML5的相关标准定义如下: "A section of a pag ...

  6. linux rcs文件中的ip,linux学习笔记之diff和patch命令

    关键字:Linux 学习笔记 运维 系统 命令 一.命令的功能 diff命令的功能为逐行比较两个文本文件,列出其不同之处.可是做成diff记录也就是补丁. patch就是利用diff制作的补丁来打到文 ...

  7. linux中内核中machine_desc,Linux-内核-学习笔记(13):移植三星官方内核

    Linux-内核-学习笔记(13):移植三星官方内核 一.移植前的准备 当拿到源代码时,首先要在window下利用SourceInsight创建一个工程,并将uboot源代码加载到SI中,方便修改和查 ...

  8. textarea中插入标签_HTMLCSS学习笔记(二)-- HTML表单标签

    表单 1 : 表单标签 <form></form> 属性 : action = '接口地址' method = 'get / post' name = '表单名称' 2 : 表 ...

  9. python里数字怎么表示_Python 中的数字—Python 学习笔记

    今天讲一下 Python 中六种标准数据类型之一:数字. 整数 整数可以执行加减乘除运算,+代表加法, -代表剪法, *代表乘法./代表除法, %代表求余数: >>> 1+2 3 & ...

最新文章

  1. 架构师成长系列 | 云原生时代的 DevOps 之道
  2. LInux 阿里云系统遇到挖矿程序
  3. release8_如何在Windows 8 Release Preview中将Chrome用作Metro浏览器
  4. 删除Win7通知区域的无效图标
  5. navicat 12 for mac 中文破解版使用说明
  6. 数据运营与组织变革 知识体系
  7. 无线鼠标服务器,remote mouse
  8. SpringBoot快速开始magic-api基础
  9. 中职学校计算机大赛方案,中等职业学校电子技能赛的活动策划方案参考
  10. 今日头条视频地址提取 谷歌插件
  11. Avira Free Antivirus 小红伞免费杀毒软件广告去除工具
  12. 攻防世界高手进阶区——dice_game
  13. DB Browser for sqlite
  14. wps合并所有sheet页_WPS怎么把几个工作表合并到一个工作表 - 卡饭网
  15. 东大计算机考研录取分数线,东南大学2020初试考研录取分数线名单
  16. 【机器学习】详解 转置卷积 (Transpose Convolution)
  17. (2016)最新最好的Unity3D Github项目收集
  18. u-center 配置u-blox GPS芯片
  19. MySQL压缩包版安装步骤
  20. Android Studio实现一个点餐系统

热门文章

  1. 客户下单服务器代码实现 之自动分单逻辑.....
  2. do msgbox loop_西门子数字量DO扩展模块SM1222
  3. 分类问题的 8 种评估方法(全)
  4. 基于PHP+MySQL婴幼儿早教网站的设计与实现
  5. 分布式下载方式(一)原理分析
  6. C#获取一串汉字汉语拼音缩写
  7. ERP物流中的物料状态
  8. java 逻辑右移,算术右移
  9. 分贝(db)的概念介绍
  10. imagemin 在各个平台报错运行报错时替代方案