[疯狂Java]集合:ArrayList、Vector(摒弃)、Arrays.ArrayList(只读、不可变长)

本文详细介绍了Java中ArrayList的工作原理,包括其实现方式、内部数组的管理、容量调整方法等,并对比了Vector的不同之处,还介绍了如何使用Arrays工具类创建只读的ArrayList。

1. List的实现类:

    1) 最常见的两个实现类分别是ArrayList(用数组实现)、LinkedList(链表实现),但由于LinkedList具有双端队列的特性因此这里先不介绍LinkedList;

    2) 早期List的实现类是Vector(也是用数组实现的),但是Vector是旧的标准,并且很多方面实现的不是很好,因此现在已经摒弃了,基本上都是用ArrayList这个新的标准;

!!并且Vector中的很多方法也不符合新的Java命名规范,因此现在基本不用Vector了,这里也就不讲了;


2. ArrayList:里面介绍的都是ArrayList的对象方法

    1) 由于ArrayList是用数组实现的,因此内部维护这一个数组,这个数组的大小就是ArrayList可以存放元素的上限,如果元素超过该限度那么就会自动增长内部数组的长度来存放更多的元素;

    2) 调节内部数组的长度:

         i. void ensureCapacity(int minCapacity);  // 将数组空间调整到至少能存放minCapacity个元素,默认长度是10

!!通常程序员无需关心ArrayList内部数组的长度,因为它可以自动调整,但是如果集合中要存放大量元素时频繁地增长数组也会降低性能,此时可以一次性先开辟一大块内存来避免频繁增长内部数组!使用该方法的前提是能很好的预估需要的长度;

         ii. void trimToSize();  // 将内部数组的长度截断至刚好等于当前元素的个数(相当于100%瘦身)

!!一般只有在List已经确定不再改变后再调用该方法瘦身,这样可以最大程度节省内存空间;但一般数组仍处于长度可变的情况下不建议调用该方法(避免增长长度所带来的性能下降);


3. 只读的Arrays.ArrayList:

    1) 可以用Arrays工具类的asList方法获取一个只读的ArrayList:static Arrays.ArrayList<T> asList(T... a);

    2) 该方法可以直接用参数中的若干元素生成一个ArrayList;

    3) 只不过该ArrayList是Arrays定义的内部类Arrays.ArrayList,它也其实就是ArrayList,但不过在Arrays的内部被修饰成了只读的,即不能修改,只能读取,并且是定长的(内部数组长度不能改变);

    4) 如果对其修改会抛出运行时异常;

Python中,有多种方法可以遍历文件夹处理子目录,以下为你介绍常见的两种方法。 ### 递归遍历 递归遍历的核心思想是定义一个函数,在函数内部对当前目录下的所有文件文件夹进行遍历。如果遇到文件夹,则递归调用该函数继续遍历这个子文件夹。下面是示例代码: ```python import os allfile = [] def dirList(path): filelist = os.listdir(path) for file in filelist: filepath = os.path.join(path, file) if os.path.isdir(filepath): dirList(filepath) else: allfile.append(filepath) # 使用示例 path = '.' # 当前目录 dirList(path) for file in allfile: print(file) ``` 上述代码定义了`dirList`函数,通过`os.listdir`获取当前目录下的所有文件文件夹,使用`os.path.join`拼接路径,再用`os.path.isdir`判断是否为文件夹,若是则递归调用`dirList`函数,若不是则将文件路径添加到`allfile`列表中。 ### 使用`os.walk`方法 `os.walk`是Python标准库中用于遍历目录树的函数,它会自动处理子目录。以下是示例代码: ```python import os for root, dirs, files in os.walk('.'): for file in files: file_path = os.path.join(root, file) print(file_path) for dir in dirs: dir_path = os.path.join(root, dir) print(dir_path) ``` `os.walk`函数返回一个三元组,包含当前目录路径`root`、当前目录下的子文件夹列表`dirs`和当前目录下的文件列表`files`。通过嵌套循环,可以遍历所有的文件文件夹
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值