java枚举类型数组_Java基础(七)泛型数组列表ArrayList与枚举类Enum
一、泛型数组列表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枚举类型数组_Java基础(七)泛型数组列表ArrayList与枚举类Enum相关推荐
- java input 数组_Java基础之:数组
Java基础之:数组 一组相同数据类型的数据,我们即称之为 数组,数组也是一种数据类型. 需要注意的是 , 数组和String 字符串 相同,也是引用类型的. 数组的初始化 方式一:动态初始化 四种格 ...
- java大括号定义数组_Java基础语法_数组
数组的概念 数组的概念:是一种容器,可以同时存放多个数据值 数组的特点: 1.数组是一种引用数据类型 2.数组当中的多个数据,类型必须统一 3.数组的长幅在程序运行期间不可改变 数组的定义格式 数组的 ...
- java scanner输入数组_java基础- scanner/方法/数组
1.用户交互scanner Next() public class demo1 { public static void main(String[] args) { //创建一个scanner对象 S ...
- java 基本类型共享_Java基础数据类型
第一类:逻辑型boolean boolean类型数据只允许取true或false,不可以0或非0的整数替代true和false,这点和C语言不同 第二类:文本型char char 型数据用来表示通常意 ...
- java arraylist枚举器遍历_Java基础(七)泛型数组列表ArrayList与枚举类Enum
一.泛型数组列表ArrayList 1.在Java中,ArrayList类可以解决运行时动态更改数组的问题.ArrayList使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能,而 ...
- java中数组的返回值是什么类型_java基础学习:数组的常用操作与基础二维数组用法、及基本数据类型和引用数据类型赋值的区别...
一.Arrays jdk中为了便于开发,给开发者提供了Arrays类,其中包含了很多数组的常用操作.例如快速输出.排序.查找等. 1.数组的常用方法 1.数组以字符串形式的输出,2.sort对数组排序 ...
- java 枚举类型初始化_java 枚举类型分析
最近做android开发,需要用到枚举值,这样可以连续赋值,我按之前c++那样书写,如下所示: public enumColorSelect { RED_BAGE= 0, GREEN_BAGE, BL ...
- java枚举类型赋值_java枚举类型(转载)
public class TestEnum { /*最普通的枚举*/ public enum ColorSelect { red, green, yellow, blue; } /* 枚举也可以象一般 ...
- java中两个doub组成一个数组_Java基础知识2-Java基本语法
数据类型 1.Java程序的基本组成 关键字:被Java语言赋予特定含义的单词,不能作标识符,如private. 标识符:由数字.字母.$和_组成的字符串,用于引用变量.且首字母不能是数字. 变量:程 ...
最新文章
- 返回键捕获 应用程序退出的两种方式(转)
- 一个高成熟度组织的规程和指南目录
- 用数组模拟队列的实现
- 004-JQuery属性
- webpack构建工具快速上手指南
- Android 与 JavaScript 相互调用桥梁 JSBridge
- dubbo+zookeper与webservice的简单对比
- 【面经】我是如何优雅的跳槽的?
- spring-第N篇整合SSM,即Mybatis+Spring+Spring MVC
- 二维码 小优机器人_自动炒菜机器人亮相服贸会 可做3000多道菜品
- matlab 控制声卡,用MATLAB和声卡实现T型波信号发生器的设计方法
- XP系统优化简单实用技法
- (项目笔记)opencv人脸识别
- 1024程序员节Bilibili电脑8位密码谜底
- w3wp.exe进程来调试web应用程序
- HZNUOJ 2977 宝可梦决战 种族并查集
- uniapp接入友盟(全网唯一 很全!!!)
- 音乐专业又和计算机有关的吗,计算机音乐专业介绍
- Newstart HA常见使用场景
- mysql 处理字符串 减断,MySQL字符串处理[8题]