java笔记三:List接口

简介:

  List承诺可以将元素维护在特定的序列中。List接口在Collection的基础上添加了大量的方法,使得可以在List的中间插入和删除元素。List与 set 不同,列表通常允许重复的元素。并且存放的顺序与插入的顺序一致。

  List接口的常用方法有:

  **[add](http://www.cnblogs.com/java/util/List.html#add(E))**([E](http://www.cnblogs.com/java/util/List.html "List 中的类型参数") o)   :将指定对象加入到列表中。

  **[add](http://www.cnblogs.com/java/util/List.html#add(int, E))**(int index, [E](http://www.cnblogs.com/java/util/List.html "List 中的类型参数") element)  :将对象加入到指定位置处。

  **[addAll](http://www.cnblogs.com/java/util/List.html#addAll(java.util.Collection))**([Collection](http://www.cnblogs.com/java/util/Collection.html "java.util 中的接口")<? extends [E](http://www.cnblogs.com/java/util/List.html "List 中的类型参数")> c)  :追加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序(可选操作)。

  **[addAll](http://www.cnblogs.com/java/util/List.html#addAll(int, java.util.Collection))**(int index, [Collection](http://www.cnblogs.com/java/util/Collection.html "java.util 中的接口")<? extends [E](http://www.cnblogs.com/java/util/List.html "List 中的类型参数")> c) :将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作)。

  **[remove](http://www.cnblogs.com/java/util/List.html#remove(int))**(int index) :移除某个位置上的元素。

  **[remove](http://www.cnblogs.com/java/util/List.html#remove(java.lang.Object))**([Object](http://www.cnblogs.com/java/lang/Object.html "java.lang 中的类") o) : 移除列表中出现的首个指定元素。

  **[set](http://www.cnblogs.com/java/util/List.html#set(int, E))**(int index, [E](http://www.cnblogs.com/java/util/List.html "List 中的类型参数") element) :用指定元素替换列表中指定位置的元素。

  **[size](http://www.cnblogs.com/java/util/List.html#size())**() :返回列表大小。
…….

  常用的有两种List类型:ArrayList和LinkedList。

一、ArrayList

  ArrayList擅长于随即访问元素,因为它像数组一样提供了下标,可以根据下标直接访问,所以可以将ArrayList看作可扩充自身尺寸的数组。但是在ArrayList的中间插入和移除元素时较慢。


 1 package com.list;
 2
 3 import java.util.ArrayList;
 4 import java.util.Iterator;
 5 import java.util.List;
 6
 7 public class ArrayListTest {
 8     public static void main(String[] args) {
 9         List list = new ArrayList();
10         //添加元素
11         list.add(“aaa”);
12         list.add(“bbb”);
13         list.add(“aaa”);
14         list.add(“ddd”);
15         list.add(“ccc”);
16         list.add(null);
17         //遍历
18         for (String string : list) {
19             System.out.println(string);
20         }
21         System.out.println(“—————“);
22         //修改
23         list.set(1, “bbb2”);
24         //删除
25         list.remove(“ccc”);
26         //迭代器遍历
27         Iterator iterator = list.iterator();
28         while(iterator.hasNext()){
29             System.out.println(iterator.next());
30         }
31         System.out.println(“————–”);
32         list.clear(); //清空列表
33         System.out.println(“清空后list的大小”+list.size());//打印大小
34         List list2 = new ArrayList();
35         list2.add(“a”);
36         list2.add(“b”);
37         //将list2添加到list中
38         list.addAll(list2);
39         //遍历
40         for (String string : list) {
41             System.out.println(string);
42         }
43     }
44 }


输出结果为:


 1 aaa
 2 bbb
 3 aaa
 4 ddd
 5 ccc
 6 null
 7 —————
 8 aaa
 9 bbb2
10 aaa
11 ddd
12 null
13 ————–
14 清空后list的大小0
15 a
16 b

由输出结果的1-5行可以看出,list存放元素的顺序与加入的顺序一致。

  二、LinkedList

  LinkedList通过代价较低的在List中间进行插入和删除操作,提供了优化的顺序访问。但是在随即访问方面相对比较慢。

  下面举个例子来演示LinkedList和ArrayList随即访问的速度:

 1 package com.list;
 2
 3 import java.util.ArrayList;
 4 import java.util.LinkedList;
 5 import java.util.List;
 6 import java.util.Random;
 7
 8 public class LinkedListTest {
 9     public static void main(String[] args) {
10         List arraylist = new ArrayList();
11         for (int i = 0; i < 5000; i++) {
12             arraylist.add(i);
13         }
14         List linkedlist = new LinkedList();
15         for (int i = 0; i < 5000; i++) {
16             linkedlist.add(i);
17         }
18         Random rand = new Random(5000);
19         //随机访问arrayList
20         long start = System.currentTimeMillis();
21         for (long i = 0; i < 500000; i++) {
22             arraylist.get(rand.nextInt(5000));
23         }
24         long end = System.currentTimeMillis();
25         System.out.println(“arrayList随机访问时间:”+(end - start));
26         //随机访问arrayList
27         start = System.currentTimeMillis();
28         for (long i = 0; i < 500000; i++) {
29             linkedlist.get(rand.nextInt(5000));
30         }
31         end = System.currentTimeMillis();
32         System.out.println(“linkedlist随机访问时间:”+(end - start));
33     }
34 }

程序运行结果为:

1 arrayList随机访问时间:20
2 linkedlist随机访问时间:2282

很明显ArrayList随即访问比LinkedList快的多,因为LinkedList是以链表的现实存储的。

  


相关文章
|
2月前
|
Java
在Java中如何实现接口?
实现接口是 Java 编程中的一个重要环节,它有助于提高代码的规范性、可扩展性和复用性。通过正确地实现接口,可以使代码更加灵活、易于维护和扩展。
191 64
|
2月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
164 57
|
2月前
|
Java
在Java中实现接口的具体代码示例
可以根据具体的需求,创建更多的类来实现这个接口,以满足不同形状的计算需求。希望这个示例对你理解在 Java 中如何实现接口有所帮助。
92 38
|
19天前
|
数据采集 JSON Java
利用Java获取京东SKU接口指南
本文介绍如何使用Java通过京东API获取商品SKU信息。首先,需注册京东开放平台账号并创建应用以获取AppKey和AppSecret。接着,查阅API文档了解调用方法。明确商品ID后,构建请求参数并通过HTTP客户端发送请求。最后,解析返回的JSON数据提取SKU信息。注意遵守API调用频率限制及数据保护法规。此方法适用于电商平台及其他数据获取场景。
|
24天前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
46 6
|
1月前
|
安全 Java 编译器
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
|
1月前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
2月前
|
Java API
Java中内置的函数式接口
Java中内置的函数式接口
30 2
|
2月前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
36 2
|
2月前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
135 1