关于JAVA核心技术(卷一)读后的思考(泛型数组列表的讨论)

在C++中编译时是要确定数组大小的,而Java有所不同,它允许在运行时确定数组的大小。但是如果仅通过数组是无法改变运行时无法动态更改数组的问题。一旦确定了数组大小,就很难改变他了数组的大小了,要解决这个问题,就需要引入ArrayList的类。它使用起来有点像数组,但在添加或删除元素时,具有自动调节数组容量的功能,而不需要为此编写任何代码。

ArrayList是一个采用类型参数的泛型类。为了指定数组列表保存的元素对象类型,需要用一对尖括号将类名括起来加在后面。下面是声明和构造一个保存Employee对象的数组列表

eg:ArrayList<Employee> staff = new ArrayList<Employee>();

两边都使用类型参数Employee,会有些繁琐。所以我们可以省去右边类型的参数。

ArrayList<Employee> staff = new ArrayList<>();

这可以当作一个“动态的数组”,泛型的类型时Employee,数组名是staff。

对于泛型有几种操作处理方法:

java.util.ArrayList<E>

ArrayList<E>():

构造一个空数组列表

ArrayList<E>(int initialCapacity):

用指定容量构造一个空数组列表   参数:initialCapacity  数组列表的最初容量

boolean add(E obj):

在数组列表的尾端添加一个元素。永远返回true。 参数:obj    添加的元素

staff.add(new Employee("Harry Hacker"....));

staff.add(new Employee("Tong Tester"......));

数组列表管理着对象引用的一个内部数组。最终,数组的全部空间有可能被用尽。这是若调用add且内部数组已经满了,数组列表将自动创建更大的数组,并将所有的对象从较小的数组中拷贝到较大的数组中。

int size():

返回存储在数组列表中的当前元素数量(这个值将小于或等与数组列表的容量)

void ensureCapacity(int capacity):

确保数组列表在不重新分配存储空间的情况下就能够保存给定数量的元素。  参数:capacity     需要的存储容量

如果已经清楚或能够估计出数组可能存储的元素数量,就可以在填充数组之前调用此方法,这个方法将分配合适个对象的内部数组,进行填充,而不用重新分配。

void trimToSize()

将数组列表的存储容量削减 到当前的尺寸。

一旦数组列表大小确认不再发生变化,调用这个方法,将存储区域大小调整为当前大小。

而对于设置数组列表元素,可以用set方法。例如staff.set(i,harry);

而获得数组列表元素的方法是get,例如:Employee e=staff.get(i);

这里可以介绍一下toArray方法,这个方法是将数组列表元素拷贝到一个数组中

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

同时这里要补充一下,add这个方法可以在列表任意位置插入元素。

而移除u元素是利用remove方法

eg:Employee e =staff.remove(n);

原文地址:https://www.cnblogs.com/zzuzhouxiang/p/10340209.html

时间: 2024-10-31 20:25:53

关于JAVA核心技术(卷一)读后的思考(泛型数组列表的讨论)的相关文章

关于JAVA核心技术(卷一)读后的思考(lambda表达式的讨论)

lambda表达式 lambda表达式是一个可传递的代码块.可以以后执行一次或者多次.在程序运行中我们经常会遇到传递代码段的情况,但是我们一般都是先构造一个对象,然后通过对象调用相应的代码块来实现传递代码块的目的,这个方法十分繁琐,设计师为解决这个问题,就设计出了lambda表达式. lambda表达式的语法我们可以参考之前写的方法,可以发现如果方法可以分为方法名,参数和方法主体.lambda表达式就是将方法名省去: 标准情况: (参数类型1 参数1,参数类型2 参数2,.....,参数类型n

关于JAVA核心技术(卷一)读后的思考(equals方法的讨论)

这是我反复看了两遍才理解的部分.其中也不乏参考了他人的微博内容,才大致对这个方法有所理解. 首先我们从Object类开始说起, 书中已经说了Object类是Java中所有类的始祖,在Java中的每个类都是由他扩展而来的,但在现实使用中并没有要求写出.如果一个类并没有明确指出超类,Object就是被认为是这个类的超类. 可以用Object类型的变量引用任何类型的对象: Object obj = new Employee("Harry Hacker",35000); 正如昨天的博文所提到过

java核心技术卷一

java核心技术卷一 java基础类型 整型 数据类型 字节数 取值范围 int 4 +_2^4*8-1 short 2 +_2^2*8-1 long 8 +_2^8*8-1 byte 1 -128-127       浮点类型 数据类型 字节数 取值范围 小数位数 float 4 10^-38~10^38和-10^-38~-10^38 小数位数6-7 double 4 10^-308~10^308和-10^-308~-10^308 15位小数         boolean 类型和char 类

读《java核心技术卷一》有感

过去一个多月了吧.才囫囵吞枣地把这书过了一遍.话说这书也够长的,一共706页.我从来不是个喜欢记录的人,一直以来看什么书都是看完了就扔一边去,可能有时候有那么一点想记录下来的冲动,但算算时间太紧,很多也是有始无终,毕竟在之前研究研究程序也只是自己的一个爱好而已,但没有想到签了一个程序员的工作.唉,这老天也太捉弄人了吧,让一个学电气工程(强电方向)学生毕业之后去写代码,而且是与硬件完全无关的代码.真是白念几年大学了.行了,就行发这么多牢骚吧. <java核心技术>有两个卷,我只看了卷一,从我的感

Java核心技术卷一 8. java并发

什么是线程 每个进程拥有自己的一整套变量,而线程则共享数据. 没有使用多线程的程序,调用 Thread.sleep 不会创建一个新线程,用于暂停当前线程的活动.程序未结束前无法与程序进行交互. 使用线程给其他任务提供机会 将代码放置在一个独立的线程中,事件调度线程会关注事件,并处理用户的动作. 在一个单独的线程中执行一个任务的简单过程: 将任务代码移到实现了 Runnable 接口的类的 run 方法中. public interface Runnable{ void run(); } Runn

Java核心技术 卷一 笔记六 Date类

在Java核心技术卷就行了一前期  date类出现的频率很高  所以就对date类进行了小小的整合 Date类有两个 date类 表示特定时间的类 这个构造函数分配一个Date对象并初始化它代表指定的毫秒数,因为被称为"纪元",即1970年1月1日00:00:00 GMT标准基准时间. 就像格林尼治时间一样  作为一种基准值而存在 一般常用的是date转为string类型 String s=new Date(0).toString(); System.out.println(s.toS

Java核心技术卷一 6. java泛型程序设计

泛型程序设计 泛型程序设计:编写的代码可以被很多不同类型的对象所重用. 类型参数:使用<String>,后者可以省略,因为可以从变量的类型推断得出.类型参数让程序更具更好的可读性和安全性. 通配符类型:很抽象,让库的构建者编写出尽可能灵活的方法. 定义简单泛型类 泛型类就是具有一个或多个类型变量的类. //引用类型变量 T ,可以有多个类型变量,public class Pair<T, U>{...} public class Pair<T> { //类定义的类型变量制

关于JAVA核心技术(卷一)读后的思考(接口的基本知识的讨论)

接口 接口技术:这种技术主要用来描述类具有什么功能,而并不给出每个功能的具体实现.一个类可以实现一个或多个接口,并在需要接口的地方,随时使用实现了相应接口对象. 接口概念:接口不是类,而是对类的一组需求的描述,这些类要遵从接口描述的统一格式进行定义. 举个简单的例子:假设有一个类A,其中有一个sort方法是对对象数组进行排序,但要求对象所属的类必须实现了 B接口.假设B接口定义如下: public interface B{ int compareTo(Object other); } 即所有实现

关于JAVA核心技术(卷一)读后的思考(内部类的讨论)

内部类 内部类是定义在另一个类中的类. 定义内部类的原因有: 1)内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据. 2)内部类可以对同一个包中的其他类隐藏起来. 3)当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷. 使用内部类访问对象状态 分析一下下面一段代码 public class TalkingClock { private int interval; private boolean beep; public TalkingClock(int inter