集合框架----ArrayList

引子:我们先来看看传统数组的用法

  1. 写一个Hero对象类

    package cn.jse.t1;

    public class Hero {

    public String name;

    public float hp;

    public int damage;

    public Hero(){}

    //增加一个初始化name的构造方法

    public Hero(String name){

    this.name=name;

    }

    //重写一个toString 方法

    public String toString(){

    return name;

    }

    }

  2. 写一个测试类

    package cn.jse.t1;

    public class TestCollection {

    public static void main(String[] args) {

    //数组的局限性

    Hero hero[] = new Hero[10];

    //分析:声明了长度为10的数组,如果不用完就是浪费内存,超过了10个又放不下

    hero[0] = new Hero("ADC");

    hero[11]= new Hero("Mid");    //这里超过了10个就会报错

    }

    }

  3. 为了解决这种的尴尬局面,我们可以使用容器类ArrayList,我们增加一些代码在测试类里面。

    package cn.jse.t1;

    import java.util.ArrayList;

    public class TestCollection {

    public static void main(String[] args) {

    ...

    //为了解决数组的局限性,引入了容器类的概念

    ArrayList heros=new ArrayList();

    heros.add(new Hero("中单"));

    //输出一下当前的容器的容量

    System.out.println(heros.size());

    heros.add(new Hero("辅助"));

    System.out.println(heros.size());

    //结果发现容器的容量是随着对象的增加而增加的,就不用考虑数组的边界问题了

    }

    }

    我们可以看下控制台的输出:

    1

    2

  4. 我们可以看看ArrayList的常用方法:

    使用方法:我们还是在测试类中增加新的代码(add、contains)

    package cn.jse.t1;

    import java.util.ArrayList;

    public class TestCollection {

    public static void main(String[] args) {

    ...

    //接下来我们可以看看ArrayList的常用方法

    ArrayList<Hero> heros2=new ArrayList<Hero>();

    //把五个对象放入ArrayList中

    for(int i=0;i<5;i++){

    heros2.add(new Hero("hero " + i));

    }

    System.out.println(heros);

    // 在指定位置增加对象 比如在下标3位置add一个superhero

    Hero superHero = new Hero("Super hero");

    heros2.add(3, superHero);

    //将数组中所有的hero输出

    System.out.println(heros2.toString());

    //通过方法contains 判断一个对象是否在容器中

    System.out.println("那么这个Hero6在不在这里面呢?  回答是:"+heros2.contains(new Hero("hero6")));

    System.out.println("那么这个superHero在不在这里面呢?  回答是:"+heros2.contains(superHero));

    }

    }

     

    控制台输出:

    [中单, 辅助]   //这里是因为我们之前有加了2个hero

    [hero 0, hero 1, hero 2, Super hero, hero 3, hero 4]

    那么这个Hero6在不在这里面呢?  回答是:false

    那么这个superHero在不在这里面呢?  回答是:true

    其他的方法就不一一列举了,有兴趣的同学可以看看相关的知识点

      1. List

        引子:ArrayList实现了接口List,常见的写法会把引用声明为接口List类型。还要注意一点的是:import java.util.List;而不是awt里面的类。

        因为ArrayList实现了List接口,所以List接口的方法ArrayList都实现了。所有用法是和上面一样的。

        List heros = new ArrayList();

      2. 泛型 Generic

        其中:1.不指定泛型的容器,可以存放任何类型的元素
        2.指定了泛型的容器,只能存放指定类型的元素以及其子类

        我们之前编写的list或者是ArrayList都有编译警告,是因为没有使用泛型。所以我们可以这么干:

        List<Hero> heros = new ArrayList<Hero>();

        还有一点是在JDK7中提供了一个减少代码量的方式:

        List<Hero> heros = new ArrayList<>();

        虽然没有少写很多代码,但是总归比原先的好写一点对吧!

        其他的泛型内容包括支持泛型的类、泛型转型等等内容以后再更

java中级——集合框架【1】-ArrayList的更多相关文章

  1. java中级——集合框架【4】-Collections

    Collections 首先我们要知道Collections是一个类,容器的工具类,就如同Arrays是数组的工具类 反转 reverse 使List中的数据发生发转 package cn.jse.c ...

  2. java中级——集合框架【3】-HashSet

    HashSet package cn.jse.hashset; import java.util.HashSet; public class TestCollection { public stati ...

  3. java中级——集合框架【2】-二叉树

    二叉树 二叉树概念 首先我们要明确,二叉树由各种节点组成:还有就是二叉树特点:(1)每个节点都可以有左子节点,右子节点(2)每一个节点都有一个值 如图所示: 代码所示: package cn.jse. ...

  4. Java集合框架之ArrayList浅析

    Java集合框架之ArrayList浅析 一.ArrayList综述: 位于java.util包下的ArrayList是java集合框架的重要成员,它就是传说中的动态数组,用MSDN中的说法,就是Ar ...

  5. java的集合框架最全详解

    java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...

  6. java.util 集合框架集合

    java的集合框架为程序提供了一种处理对象组的标准方式.设计了一系列标准泛型接口: ⑴Collection ()接口,扩展了Iterable接口,位于集合层次结构的顶部,因此所有的集合都实现Colle ...

  7. Java基础——集合框架

    Java的集合框架是Java中很重要的一环,Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型.Java平台的完整集合框架如下图所示: 上 ...

  8. java的集合框架之一

    java是一套很成熟的东西,很多商用的东西都喜欢用它,用的人多,稳定.不过一般也不怎么说起它,因为太常见了,私下里说,写java应用层得就像农民工,每一处都是搭积木,根据设计师的东西如何优雅地搭好积木 ...

  9. 浅谈Java的集合框架

    浅谈Java的集合框架 一.    初识集合 重所周知,Java有四大集合框架群,Set.List.Queue和Map.四种集合的关注点不同,Set 关注事物的唯一性,List 关注事物的索引列表,Q ...

随机推荐

  1. UVA1025-A Spy in the Metro(动态规划)

    Problem UVA1025-A Spy in the Metro Accept: 713  Submit: 6160Time Limit: 3000 mSec Problem Descriptio ...

  2. mongodb创建用户(转发)

    参考文档: https://www.cnblogs.com/itxiongwei/p/5520863.html MongoDB 缺省是没有设置鉴权的,业界大部分使用 MongoDB 的项目也没有设置访 ...

  3. selenium之选项卡管理

    在使用selenium管理浏览器的时候遇到一些小问题,现将这些小问题作一下总结: (1)browser是什么? from selenium import webdriver browser = web ...

  4. 路飞学城-Python开发集训-第4章

    学习心得: 学习笔记: 在python中一个py文件就是一个模块 模块好处: 1.提高可维护性 2.可重用 3.避免函数名和变量名冲突 模块分为三种: 1.内置标准模块(标准库),查看所有自带和第三方 ...

  5. range()函数

    range()函数 函数说明: range(start, stop[, step]) -> range object,根据start与stop指定的范围以及step设定的步长,生成一个序列.参数 ...

  6. centos7 搭建openvpn服务器

    OpenVPN是一个开源代码的VPN应用程序,可让您在公共互联网上安全地创建和加入专用网络.相比pptp,openvpn更稳定.安全. 本篇博客主要介绍下面两点: 1. Centos 7下安装与配置O ...

  7. JDK动态代理(1)-----------new 对象的方式

    //case 1: 直接newHelloWorldImpl helloWorldImpl = new HelloWorldImpl(); //case 2: 反射拿到类之后,通过newInstance ...

  8. 4939-Agent2-洛谷

    传送门 emm... 这次没有原题了 (因为我懒) 就是一道很简单的树状数组 真的很简单很简单 只用到了一点点的差分 注意注意: 只用树状数组,不用差分会t掉的 所以.. 我不仅t了 还wa了 emm ...

  9. 自己制作Chrome便携版实现多版本共存

    本文只针对Windows下的Chrome浏览器的使用. 有时候我们需要使用老版本Chrome,或者仅仅体验一下最新版. 上古时代有IETester用来测试多个IE版本,和本机的IE不冲突. Chrom ...

  10. LINQ基本概念及误区

    LINQ基本概念: LINQ全名Language Integrated Query(语言集成查询),它允许我们通过C#(或VB)语言,以操作内存数据的方式,查询数据库. LINQ的由来: 传统上,对数 ...