一大波Java来袭(八)——Java集合之List接口

本文主要讲Collection接口之一List接口及其实现类。

          List集合,特点:有序,可重复


与上文中Set不同的是,List集合是有序的,这种顺序表现在:通过索引的形式,记录了元素的添加顺序。

List接口的实现类,如图所示:

1. ArrayList 与数组有关吗?          

2.Vector

3.LinkedList

          上文研究Set集合的时候,了解到LinkedHashSet是通过链表的形式将hash算法存储的元素链接起来,这里是不是将:带有索引的List集合也通过链表的形式,连接起来呢?

          从图中看出,实现了deque接口,猜测应该会实现双向队列的效果把。


待我慢慢道来.......

一、List接口和ListIterator接口

List接口的特点在于通过“索引”记录了元素的添加顺序。因此相比较起父接口Collection而言,添加了一些根据索引操作集合元素的方法。

额外添加了专门操作List的方法:listIterator()

listIterator与Iterator对比listIterator增加了向前迭代的功能(Iterator只能向后迭代),增加了通过add方法向List集合中添加元素(Iterator只能删除元素)

public class TestlistIterator {

	public static void main(String[] args) {
		String[] books = {"englishbook","computerbook","musicbook"};
		List bookList = new ArrayList();
		for (int i = 0; i < books.length; i++) {
			bookList.add(books[i]);
		}
		ListIterator bookListIterator = bookList.listIterator();
		while(bookListIterator.hasNext()){
			System.out.println("book正向迭代:"+bookListIterator.next());
			bookListIterator.add("---------分隔符--------------");
		}
		System.out.println("-------下面开始反向迭代----------------");
		while(bookListIterator.hasPrevious()){
			System.out.println("book反向迭代:"+bookListIterator.previous());
		}
	}

}

结果如下:


二、ArrayList和Vector实现类

1. 相同点:

          都是基于数组实现的List类,所以封装了一个动态再分配的Object[]数组。通过属性capacity表示长度,且会自动增长。

         若添加大量元素,可使用ensureCapacity一次性添加capacity。甚至是直接指定capacity的大小,从而减少重新分配的次数,提高性能。

2. 不同点:

         简单理解为新的ArrayList替代旧的Vector的功能。

         ArrayList是线程不安全,Vector线程安全(性能较高,但不建议使用)

         Stack是Vector的子类,模拟“栈”数据结构,LIFO。

LinkedList基于链表实现List类,优化顺序访问,特别是:插入、删除,速度非常快。(同时实现Deque接口,双向队列)

三、固定长度的List

         操作数据的工具类Arrays.asList(.....)将数组转化为List集合【此时为Arrays内部类ArrayList的实例

         注意:此时长度已经固定了!不可改变

四、性能排名榜

各容器性能对比,主要取决于集合的底层实现,是:数组/链表

插入、删除、迭代时:数组 < 链表。

随机访问:数组 > 链表。(数组,连续内存区)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我会为您继续解答关于Java导出List集合到txt文件中的问题。 在上一篇文章中,我们已经学习了如何将List集合中的数据写入到txt文件中。接下来,我们需要考虑如何将List集合中的数据格式化后写入到txt文件中。 我们可以使用Java中的String.format()方法来格式化输出数据。下面是一个示例代码: ```java List<String> dataList = new ArrayList<String>(); // 添加数据到dataList中 ... // 创建文件输出流 FileOutputStream fos = new FileOutputStream("output.txt"); // 创建输出流写入器 OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8"); // 创建缓冲写入器 BufferedWriter bw = new BufferedWriter(osw); // 格式化数据并写入到txt文件中 for (String data : dataList) { String formattedData = String.format("%-10s%-10s%-10s", data.getField1(), data.getField2(), data.getField3()); bw.write(formattedData); bw.newLine(); } // 关闭缓冲写入器 bw.close(); ``` 在这个示例代码中,我们假设List集合中存储的是一个自定义类的对象,该对象有三个字段:field1、field2、field3。我们使用String.format()方法将这些字段格式化成长度为10的字符串,并使用%-10s指定左对齐方式。 最后,我们使用BufferedWriter将格式化后的数据写入到txt文件中,并使用newLine()方法添加一个换行符,以便下次写入时数据不会覆盖之前的数据。 希望这个示例代码对你有所帮助!如果您还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值