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是以链表的现实存储的。

  

时间: 2024-10-26 05:47:04

java笔记三:List接口的相关文章

Java笔记三:继承(inheritance)

例如:  代码如下 复制代码 class Manager extends Employee {       //Manager 类继承Employee类,同时添加新的方法setBonus和新的域bonus       public void setBonus(double s)       {             bonus = s;       }       ...       private double bonus; } 1. 子类方法覆盖(override)超类方法 假设Manag

《java与模式》笔记-----抽象类和接口

笔记 抽象类和接口 什么是接口:接口就是一些方法特征的集合------接口是对抽象的抽象. 什么是抽象类:抽象类对某具体类型的部分实现------抽象类是对具体的抽象. 方法特征包括:方法的名字.参数的数目.参数的类型.不包括:返回类型.参数名字.和抛出的异常. 接口是类型转换的前提.是动态调用的保证.实现某一接口就完成了类型的转换(多重继承):动态调用只关心类型,不关心具体类.          -------------------------------------------------

接口继承-关于java中Dao模块接口问题,请教一下原理

问题描述 关于java中Dao模块接口问题,请教一下原理 BaseDao.java public interface BaseDao {} BaseDaoImpl.java public abstract class BaseDaoImpl implements BaseDao {} UserService.java public interface UserService extends BaseDao{} UserServiceImpl.java public class UserServi

java中监听接口里面的onclick方法为什么被称为回调方法

问题描述 java中监听接口里面的onclick方法为什么被称为回调方法 那普通接口有回调方法吗,普通类有回调方法吗, 回调方法是如何定义的 解决方案 你别被回调这个词搞蒙了,其实就是把方法当做参数而已 解决方案二: 因为onclick你定义了,不是自己调用,而是间接由按钮点击后系统类库去调用,所以叫回调. 英文叫做callback. 解决方案三: 回调方法简单的说就是a方法都用b方法,b方法执行过程中需要调用a方法,callback 解决方案四: [个人向]Android回调接口的实现方法ja

java中实现Serializable接口的类有什么特点?

问题描述 java中实现Serializable接口的类有什么特点? java中实现Serializable接口的类有什么特点,还看到这个实现该接口的类里面一个常量,private static final long serialVersionUID = 1L;如何理解这个常量呢 解决方案 Serializable是一个标识接口,没有需要实现的方法,凡是实现该接口的类都可以进行序列化和反序列化操作. 实现serializable接口的作用是就是可以把对象存到字节流,然后可以恢复.所以你想如果你的

Java中实现Comparator接口和用法实例(简明易懂)_java

在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标. 接下来我们模拟下在集合对象中对日期属性进行排序 一.实体类Step package com.ljq.entity; /** * 运号单流程 * * @author Administrator * */ public class Step{ /** 处理时间 */ private String acceptTime = ""; /** 快件所在地点 */ private String

列表-关于JAVA中的List接口

问题描述 关于JAVA中的List接口 有如下说明代码 class A{} main() { Listall=ArrayList(); all.add(new A()); all.add(new A()); A[] a1=new A[2]; a1=(A[])all.toArray(); A[] a2=all.toArray(new A[]{}); } 以上代码, a1=(A[])all.toArray();总是报ClassCastException错误, 而toArray()方法返回的是Obje

asp调用java 写的webservice接口怎么用啊!(在线等)

问题描述 路过的各位朋友,asp调用java写的webservice接口怎么用啊!一个很简单的例子,就是传个参数进去,然后返回出来就可以了! 解决方案 解决方案二:根据权威机构的调查,搜索引擎的前4名网站一般会获得较高的访问量.但是如果想要使自己的网站排在前4名,竞价花费的价格是非常高的.而花费少的话,网站排名靠后,导致竞价排名的效果大打折扣.毫无疑问,每个客户都希望自己的网站排在搜索引擎的首页,但是同样是页,第一名和第十名的竞价价格也许会2倍甚至更多.对于大多说发展期的公司来说,往往需要抉择选

VSTO学习笔记(三) 开发Office 2010 64位COM加载项

原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(Automation Executables) 2.Office加载项(COM or Excel Add-In) 3.Office文档代码或模板(Code Behind an Office Document or Template) 4.Office 智能标签(Smart Tags) 本次我们将学习使