一、泛型数组列表ArrayList

1.在Java中,ArrayList类可以解决运行时动态更改数组的问题。ArrayList使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能,而不需要为此编写任何代码。

对数组列表实施插入和删除操作效率比较低,对于小型数组来说可以接受。但是如果数组存储的元素数比较多,又经常需要在中间位置插入、删除元素,就应该考虑使用链表。

ArrayList是一个采用类型参数(type parameter)的泛型类(generic class)。为了指定数组列表保存的元素对象类型,需要用一对尖括号将类名括起来加在后面。

例如:构造和保存一个Employee对象的数组列表

ArrayList staff = new ArrayList<>();

2.ArrayList类的一些方法

(1)使用add方法可以将元素添加到数组列表中中

staff.add(new Employee("Carl Cracker", 75000, 1987, 12, 15));

数组列表管理着对象引用的一个内部数组。最终,数组的全部空间有可能被用尽。这就显示出数组列表的优点:如果调用add方法且内部数组已经满了,数组列表就将自动地创建一个更大的数组,并将所有的对象从较小的数组中拷贝到较大的数组中。

如果已经明确数组存储的元素的数量,可以在add前调用ensureCapacity方法:这个方法调用将分配一个包含100个对象的内部数组。

staff.ensureCapacity(100);

也可以在构造数组列表的时候就指定初始容量:

ArrayList staff = new ArrayList<>(100);

(2)使用size方法将返回数组列表中包含的实际元素数目:打印结果:3

staff.add(new Employee("Carl Cracker", 75000, 1987, 12, 15));

staff.add(new Employee("Harry Hacker", 50000, 1989, 10, 1));

staff.add(new Employee("Tony Tester", 40000, 1990, 3, 15));

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

(3)使用trimToSize方法将存储区域的大小调整为当前元素数量所需要的存储空间数目,垃圾回收器将回收多余的存储空间。一旦整理了数组列表的大小,添加新元素就需要花时间再次移动存储块,所以应该在明确不会添加任何元素时,再调用这个方法。

staff.trimToSize();

(4)使用get和set方法实现访问或改变数组列表中元素的操作:数组列表访问元素语法较为复杂

staff.set(i, Harry); // 等价于对数组a的元素赋值:a[i] = Harry;

staff.get(i); // 等价于获取数组a下标为i的元素:Employee e = a[i]

(5)使用toArray方法将数组列表中的元素拷贝到一个数组中:常用的数组列表使用方法,既可以灵活地扩展数组,又可以方便地访问数组元素

// 第一步:创建一个数组列表,并添加所有的数组元素

ArrayList list = new ArrayList<>();

while(...){

x = ...;

list.add(x);

}

// 第二步:将数组列表中的元素拷贝到数组中便于访问

X[] a = new X[list.size()];

list.toArray(a)

(6)使用带索引的add方法在数组列表的中间插入元素:

int n = staff.size()/2;

staff.add(n, e);

(7)使用remove方法移除索引位置的元素并返回:

Employee e = staff.remove(n)

(8)使用for each循环遍历数组列表:

for(Employee e : staff)

e.raiseSalary(5);

3.类型化与原始数组列表的兼容性

假如有下面这个没有使用类型参数的类:可以看到,这里的ArrayList没有使用泛型,如果和这些代码交互就会有一些问题。

public classEmplayeeDB{public voidupdate(ArrayList list){..}publicArrayList find(String query){...}

}

可以将一个类型化的数组列表传递给update方法,而不需要进行任何类型转换:即只要是ArrayList类对象,不管是什么具体类型化都可以编译通过。

ArrayList staff =...;

employeeDB.update(staff);

但是,如果将一个原始的没有类型化的ArrayList赋值给一个类型化ArrayList就会得到警告:因为得到的可能不是Employee类的类型的数组列表

ArrayList result = employeeDB.find(....);

这个时候可以使用强制类型转换:这个时候会得到另外一个警告,因为虚拟机中没有类型参数

ArrayList result = (ArrayList)employeeDB.find(....);

这个时候,如果确保不会造成严重的后果,可以使用@SuppressWarnings("unchecked")来标记这个变量能够接受类型转换:

@SuppressWarnings("unchecked")

ArrayList result = (ArrayList)employeeDB.find(....);

二、枚举类Enum

1.没有构造器和方法的枚举类:在比较两个枚举类型的值时,永远不需要调用equals,而是直接使用“==”就可以了。

public enum Size (SMALL, MEDIUM, LARGE, EXTRA_LARGE};

2.可以在枚举类型中添加构造器、方法和域,例如:

enumSize

{

SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");

// 构造器private Size(String abbreviation) { this.abbreviation =abbreviation; }

// 返回括号里面的字符(缩写)public String getAbbreviation() { returnabbreviation; }

// 括号里面的字符(缩写)privateString abbreviation;

}

3.枚举类的一些方法:

(1)toString方法能够将枚举对象转化成字符串并返回枚举常量名,例如:

System.out.println(Size.SMALL.toString());   // 打印:SMALL

(2)valueOf方法能够根据枚举常量名返回枚举对象,例如:

Size s = Enum.valueOf(Size.class, "SMALL");

System.out.println(s.getAbbreviation());   // 打印:S

(3)values方法可以返回一个包含全部枚举值的数组,例如:

Size[] values =Size.values();for(Size size : values)

System.out.print(size+ " ");  // 打印:SMALL MEDIUM LARGE EXTRA_LARGE

(4)ordinal方法返回enum声明中枚举常量的位置,例如:

System.out.println(Size.EXTRA_LARGE.ordinal()); // 打印:3

java arraylist枚举器遍历_Java基础(七)泛型数组列表ArrayList与枚举类Enum相关推荐

  1. java枚举类型数组_Java基础(七)泛型数组列表ArrayList与枚举类Enum

    一.泛型数组列表ArrayList 1.在Java中,ArrayList类可以解决运行时动态更改数组的问题.ArrayList使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能,而 ...

  2. print arraylist 显示的不是内容_泛型数组列表 java.util.ArrayListlt;Egt;

    泛型数组列表 java.util.ArrayList<E> ArrayList<E>(int initialCapacity) // 用指定容量构建一个空数组列表 ArrayL ...

  3. 泛型数组列表ArrayList

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理清 java 中的 数组列表 ArrayList: [2]数组列表 ArrayList 2.1)A ...

  4. go语言基础数据结构学习---- 数组, 列表(list)和切片(slice)

    go语言基础数据结构学习–> 数组, 列表(list)和切片(slice) go 语言中的 数组是类型相同的元素的集合, 列表是双链表的容器, 可以添加不同类型的数据切片是对现有数组的引用, 比 ...

  5. java arraylist 构造_Java基础五:构造方法、ArrayList

    Java的构造方法 面向对象:属性和方法,当对象被创建的时候,构造方法用来初始化该对象,给对象的成员变量赋初始值 构造方法的格式: 修饰符 构造方法名(参数列表){方法体} 写法: 1.方法名与他所在 ...

  6. java继承原理内存角度_Java基础知识巩固

    最近发现自己的Java基础知识还是有点薄弱,刚好有点空闲时间进行再补一补,然后进行整理一下,方便自己以后复习.其实个人认为Java基础还是很重要的,不管从事Java后端开发还是Android开发,Ja ...

  7. java input 数组_Java基础之:数组

    Java基础之:数组 一组相同数据类型的数据,我们即称之为 数组,数组也是一种数据类型. 需要注意的是 , 数组和String 字符串 相同,也是引用类型的. 数组的初始化 方式一:动态初始化 四种格 ...

  8. java 文件路径表达式_Java基础(二十二) Lambda表达式和File类

    函数式编程思想 强调的是做什么,而不是以什么样的方式来做,它忽略了面向对象的复杂语法,只要能够获取到结果,谁去做的,怎么做的,都不重要,重要的是结果,不重视过程. 冗余的Runnable代码 传统的写 ...

  9. java中数组的返回值是什么类型_java基础学习:数组的常用操作与基础二维数组用法、及基本数据类型和引用数据类型赋值的区别...

    一.Arrays jdk中为了便于开发,给开发者提供了Arrays类,其中包含了很多数组的常用操作.例如快速输出.排序.查找等. 1.数组的常用方法 1.数组以字符串形式的输出,2.sort对数组排序 ...

最新文章

  1. 【HEVC】1、HM-16.7编码器的基本结构
  2. 旋转矩阵、欧拉角、四元数、轴/角之间的转换
  3. 教你解决ChartDirector Linux下中文乱码
  4. 我的编程生涯的入门语言 - C语言之学员成绩管理
  5. iOS之深入解析保证线程安全的“锁”的使用和性能分析
  6. 数据结构学习笔记(六)链表算法题
  7. T-Sql备份还原数据库
  8. python和gui结合实例_Python GUI —— 简单例子+讲解
  9. iis服务器并发支持人数 主要参数_服务器常见问题解决
  10. Mysql学习总结(65)——项目实战中常用SQL实践总结
  11. spring集成mybatis后怎么在控制台打印sql语句
  12. mac上virtualbox创建vm需要注意启动顺序
  13. android 广播自启动,关于BOOT_COMPLETED广播-自启动
  14. 【已解决】maven打包时xxx.xxx程序包不存在
  15. CQI的解释(完整版)
  16. web安全实验:Attack1-6
  17. linux系统开发安卓应用,在 Linux 里搭建 Android App 开发环境
  18. pom.springmvc.psring-contect自用常用文件配置
  19. 英雄联盟(LOL)3d模型显示
  20. 002如何构建hadoop集群环境?

热门文章

  1. 在传统行业做数字化转型之业务篇
  2. ASP.NET Core 性能优化最佳实践
  3. 没有docker,谈什么微服务架构?
  4. 三分钟Docker-环境搭建篇
  5. 与时俱进 | 博客现已运行在 .NET Core 3.0 及 Azure 上
  6. 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:4. 设备上报属性
  7. 从严治码-系统集成项目之根本
  8. Visual Studio 2017 15.9 版本发布:推出全新的导入 / 导出配置功能
  9. 分析现有 WPF / Windows Forms 程序能否顺利迁移到 .NET Core 3.0
  10. Docker最全教程——从理论到实战(二)