文章目录

  • 1、ArrayList
  • 2、特点
  • 3、和数组的区别
  • 4、常用的方法
  • 5、使用泛型与不使用泛型
  • 6、遍历
  • 7、练习

1、ArrayList

在 java基础:6.0 ArrayList 中,初步了解了ArrayList,知道了ArrayList的特点:

  1. ArrayList 的大小灵活,所以无须提前给定它的大小。而当创建一个数组时,它的大小必须给定。
  2. ArrayList 包含许多有用的方法。比如,可以使用contains 方法来测试某个元素是否在列表中。如果使用数组,则需要编写额外代码来实现该方法。
  3. 元素必须是一种对象,不能是int,double…,可以是Integer.
  4. ArrayList 可以用来存储多个自定义的对象
{...ArrayList<String> cityList = new ArrayList<>();   // <>中的元素必须是一种对象,不能是int,double..,可以是Integer.cityList.add("London");...cityList.add("Miami");System.out.println(cityList.Size() + cityList.contains("Miami") + cityList.remove("Miami");System.out.println(cityList.toString());   //  == System.out.println(cityList);
}

2、特点

以数组实现。节约空间,但数组有容量限制。超出限制时会增加50%容量,用System.arraycopy()复制到新的数组,因此最好能给出数组大小的预估值。默认第一次插入元素时创建大小为10的数组。
按数组下标访问元素–get(i)/set(i,e) 的性能很高,这是数组的基本优势。
直接在数组末尾加入元素–add(e)的性能也高,但如果按下标插入、删除元素–add(i,e), remove(i), remove(e),则要用System.arraycopy()来移动部分受影响的元素,性能就变差了,这是基本劣势。

3、和数组的区别

4、常用的方法

toArray 可以把一个ArrayList对象转换为数组。

需要注意的是,如果要转换为一个Hero数组,那么需要传递一个Hero数组类型的对象给toArray(),这样toArray方法才知道,你希望转换为哪种类型的数组,否则只能转换为Object数组。

        ArrayList heros = new ArrayList();// 初始化5个对象for (int i = 0; i < 5; i++) {heros.add(new Hero("hero " + i));}Hero specialHero = new Hero("special hero");heros.add(specialHero);System.out.println(heros);Hero hs[] = (Hero[])heros.toArray(new Hero[]{});System.out.println("数组:" + hs);

addAll 把另一个容器所有对象都加进来.
heros.addAll(anotherHeros);

5、使用泛型与不使用泛型

学习别人的程序时发现有人是第一种写法,有人是第二种。

  1. ArrayList heros = new ArrayList();
    对于不使用泛型的容器,可以往里面放英雄,也可以往里面放物品
    heros.add(new Hero(“盖伦”));
    heros.add(new Item(“冰杖”)); // 放别的类的对象并不会报错

  2. ArrayList<Hero> heros = new ArrayList<>();
    使用泛型后, heros.add(new Item(“冰杖”));则会系统报错,因此此时只可以放属性是Hero的对象,或者Hero的子类

  3. 如果要求ArrayList只能放两种对象,则可以把这两个对象继承在同一个父类。利用了2中的知识点。

6、遍历

有三种方法。

for 用for循环遍历

iterator 迭代器遍历

for: 用增强型for循环

package collection;import java.util.ArrayList;
import java.util.Iterator;public class TestCollection {public static void main(String[] args) {ArrayList<Hero> heros = new ArrayList<>();// 初始化5个对象for (int i = 0; i < 5; i++) {heros.add(new Hero("hero " + i));}Hero specialHero = new Hero("special hero");heros.add(specialHero);System.out.println(heros);// 第一种遍历 for循环System.out.println("--------for 循环-------");for (int i = 0; i < heros.size(); i++) {Hero h = heros.get(i);System.out.println(h);}//第二种遍历,使用迭代器System.out.println("--------使用while的iterator-------");Iterator<Hero> it= heros.iterator();//从最开始的位置判断"下一个"位置是否有数据//如果有就通过next取出来,并且把指针向下移动//直到"下一个"位置没有数据while(it.hasNext()){Hero h = it.next();System.out.println(h);}//迭代器的for写法System.out.println("--------使用for的iterator-------");for (Iterator<Hero> iterator = heros.iterator(); iterator.hasNext();) {Hero hero = (Hero) iterator.next();System.out.println(hero);}// 第三种,增强型for循环System.out.println("--------增强型for循环-------");for (Hero h : heros) {System.out.println(h);}}}

7、练习

练习1 -判断是否相同
如果就是要判断集合里是否存在一个 name等于 "hero 1"的对象,应该怎么做?
疑问 为什么方法1和方法2的答案不一样???

package collection;import java.util.ArrayList;public class TestCollection {public static void main(String[] args) {ArrayList<Hero> heros = new ArrayList<>();// 初始化5个对象for (int i = 0; i < 5; i++) {heros.add(new Hero("hero " + i));}Hero specialHero = new Hero("special hero");heros.add(specialHero);System.out.println(heros);Hero testhero = new Hero("hero 1");for(Hero h: heros) {if ( h.getName() == testhero.getName() )System.out.println("存在");else System.out.println("不存在");}System.out.println("方法2");for(int i=0 ; i<heros.size(); i++) {if(heros.get(i).toString().equals("hero 2"))System.out.println("存在");}}
}

练习2 - 首先初始化一个Hero集合,里面放100个Hero对象,名称分别是从
hero 0
hero 1
hero 2

hero 99.
通过遍历的手段,删除掉名字编号是8的倍数的对象

public class TestCollection {public static void main(String[] args) {ArrayList<Hero> heros = new ArrayList<>();        // 初始化5个对象for (int i = 0; i < 100; i++) {heros.add(new Hero("hero " + i));}        for(int i=0; i < heros.size();i++) {int n = Integer.parseInt(heros.get(i).getName().substring(5));if( n%8 ==0 )heros.remove(i);}for(Hero a:heros)System.out.println(a);}
}

转载于:https://www.cnblogs.com/l20902/p/10610878.html

java基础:13.1 集合框架 - ArrayList相关推荐

  1. 【JAVA基础篇】集合框架

    一.集合框架图 Java集合框架主要包含两种类型的容器,一是集合(Collection),存储元素集合,二是图(Map),存储键(key)-值(value)对.Collection接口下面有两个重要的 ...

  2. Java基础知识第二讲:Java开发手册/JVM/集合框架/异常体系/Java反射/语法知识/Java IO

    Java基础知识第二讲(Java编程规范/JVM/集合框架/异常体系/Java反射/语法知识/Java IO/码出高效) 分享在java学习及工作中,常使用的一些基础知识,本文从JVM出发,讲解了JV ...

  3. JAVA语言基础-面向对象(集合框架02List、泛型)

    2019独角兽企业重金招聘Python工程师标准>>> 16.01_集合框架(去除ArrayList中重复字符串元素方式)(掌握) A:案例演示 需求:ArrayList去除集合中字 ...

  4. Java基础13:反射与注解详解

    Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...

  5. 明翰Java教学系列之集合框架篇V0.2(持续更新)

    文章目录 传送门 前言 什么是集合框架 集合框架体系 Collection接口 `Set接口` `HashSet` LinkedHashSet TreeSet EnumSet Queue接口 Prio ...

  6. java基础入门-04-【集合学生管理系统】

    Java基础入门-04-[集合&学生管理系统] 11.集合&学生管理系统 11.1.ArrayList 集合和数组的优势对比: 11.1.1 ArrayList类概述 11.1.2 A ...

  7. Java 基础面试之集合

    Java 基础面试之集合 1.Collection接口 的实现类 答:Collection接口有3个子接口:List.Set.Queue a.List(有序.可重复):的实现类有ArrayList.V ...

  8. java hashmap 的api_JAVA基础--JAVA API集合框架(ArrayList、HashSet、HashMap使用)

    一.集合Collection 1. 集合介绍 变量:表示的内存中的一个空间,只能保存确定类型的单个数据 数组:表示的是内存中的多个连续的空间,这些空间中可以存储多个同类型的数据. 后期继续学习面向对象 ...

  9. Java核心技术点之集合框架

    1. 概述     Java集合框架由Java类库的一系列接口.抽象类以及具体实现类组成.我们这里所说的集合就是把一组对象组织到一起,然后再根据不同的需求操纵这些数据.集合类型就是容纳这些对象的一个容 ...

最新文章

  1. p6安装后怎么连接oracle的数据库,p6-oraclexe数据库连接不上处理方法内部版20151012.doc...
  2. SpringBoot资料整理(3)
  3. 织梦 m list.php tid,在织梦标签dede:list中增加noflag属性的方法支持5.7版本
  4. 缓存穿透、缓存击穿、缓存雪崩及其解决方案
  5. 用北斗和阿里云毫米级监控山体滑坡 他还只是铁路工人
  6. 【oracle】日期加减计算
  7. node.js Lordofpomelo点击登录(login)终端提示成功,页面不跳转无反应
  8. ubuntu安装spark-2.4.7-bin-without-hadoop
  9. Strings_append_学习
  10. java 读取mysql数据库_原生Java操作mysql数据库过程解析
  11. 在Ubuntu中搭建NFS服务器
  12. C语言知识点总结(完美版)
  13. CLRC663学习笔记
  14. AutoCAD 2019 mac中文
  15. 宝马屏幕共享android,宝马屏幕共享功能怎么用
  16. ffmpeg命令行将ts转码为mp4
  17. VEH+硬件断点实现无痕HOOK
  18. 基于epoll,socket与protobuf的简单帧同步游戏服务器
  19. react创建ts项目
  20. Iterative Linear Quadratic Gaussian(iLQG)

热门文章

  1. Python学习之==日志模块
  2. MySQL 事物的4种隔离级别
  3. ArcGIS AddIN异常:无法注册程序集 未能加载文件或程序集ESRI.ArcGIS.Desktop.Addins
  4. 补PSP进度(10.28-11.3)
  5. shell if判断语句
  6. HDOJ 2795 Billboard
  7. 心得18--JavaWEB国际化类和jstl对应的标签案例分析
  8. pip/pip3 install 报错 “Could not find a version that satisfies the requriement xxx” 的解决方法
  9. 求1~100以内的素数,最简单的方式
  10. c语言堆栈基本代码入栈出栈_几道和「堆栈、队列」有关的面试算法题