Java类集合之List详解

合集下载

java list声明方法

java list声明方法

在Java编程语言中,List是一个用于存储和管理对象的数据结构。

以下是List声明方法的详细介绍:1. 声明ListList声明的第一步是定义变量。

在Java中,List类型可以通过使用关键字`List`来声明。

然后,在变量声明的后面使用圆括号`()`将变量类型括起来,例如:```javaList<String> nameList = new ArrayList<>();```这意味着我们可以声明一个名为`nameList`的变量,它是一个类型为`List`的对象,其内部可以存储字符串类型的元素。

`new`关键字用于创建一个新的`ArrayList`对象,用于存储nameList变量中即将添加的元素。

2. 添加元素当我们创建一个新的List对象时,我们可以通过使用`add`方法向其中添加元素。

`add`方法接受一个参数,这个参数是要添加的元素。

在上面的代码中,我们使用了一个`String`类型的元素作为参数添加到`nameList`变量中。

```javanameList.add("John");```在这段代码中,我们调用`add`方法,并将参数"John"传递给它。

这样,`nameList`变量就包含了一个新的元素"John"。

3. 删除元素删除List中的元素可以通过使用`remove`方法来实现。

`remove`方法接受一个参数,这个参数是要删除的元素的位置。

例如,如果要删除nameList变量中的第一个元素,可以这样做:```javanameList.remove(0);```这里,我们使用了`remove`方法,并将参数0传递给它,这样就可以删除`nameList`变量中的第一个元素。

4. 遍历List遍历List中的元素可以通过两种方式来实现。

第一种是使用`for`循环:```javafor(String name : nameList) {// 处理每一个name元素}```在这个例子中,我们使用了一个`for`循环,并将`nameList`变量作为循环的参数。

java中List的用法和实例详解

java中List的用法和实例详解

java中List的用法和实例详解List包括List接口以及List接口的所有实现类。

因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法,又因为List是列表类型,所以List接口还提供了一些适合于自身的常用方法,如表1所示。

表1 List接口定义的常用方法及功能从表1可以看出,List接口提供的适合于自身的常用方法均与索引有关,这是因为List集合为列表类型,以线性方式存储对象,可以通过对象的索引操作对象。

List接口的常用实现类有ArrayList和LinkedList,在使用List集合时,通常情况下声明为List类型,实例化时根据实际情况的需要,实例化为ArrayList或LinkedList,例如:List<String> l = new ArrayList<String>();// 利用ArrayList类实例化List集合List<String> l2 = new LinkedList<String>();// 利用LinkedList类实例化List集合1.add(int index, Object obj)方法和set(int index, Object obj)方法的区别在使用List集合时需要注意区分add(int index, Object obj)方法和set(int index, Object obj)方法,前者是向指定索引位置添加对象,而后者是修改指定索引位置的对象,例如执行下面的代码:src\com\mwq\TestCollection.java关键代码:public static void main(String[] args) {String a = "A", b = "B", c = "C", d = "D", e = "E";List<String> list = new LinkedList<String>();list.add(a);list.add(e);list.add(d);list.set(1, b);// 将索引位置为1的对象e修改为对象blist.add(2, c);// 将对象c添加到索引位置为2的位置Iterator<String> it = list.iterator();while (it.hasNext()) {System.out.println(it.next());}}在控制台将输出如下信息:ABCD因为List集合可以通过索引位置访问对象,所以还可以通过for循环遍历List集合,例如遍历上面代码中的List集合的代码如下:src\com\mwq\TestCollection.java关键代码:for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));// 利用get(int index)方法获得指定索引位置的对象}src\com\mwq\TestCollection.java完整代码如下:package com.mwq;import java.util.ArrayList;import java.util.LinkedList;import java.util.Iterator;import java.util.List;public class TestCollection {public static void main(String[] args) {System.out.println("开始:");String a = "A", b = "B", c = "C", d = "D", e = "E";List<String> list = new LinkedList<String>();list.add(a);list.add(e);list.add(d);list.set(1, b);// 将索引位置为1的对象e修改为对象blist.add(2, c);// 将对象c添加到索引位置为2的位置Iterator<String> it = list.iterator();while (it.hasNext()) {System.out.println(it.next());}// for (int i = 0; i < list.size(); i++) {// System.out.println(list.get(i));// 利用get(int index)方法获得指定索引位置的对象// }System.out.println("结束!");}}2.indexOf(Object obj)方法和lastIndexOf(Object obj)方法的区别在使用List集合时需要注意区分indexOf(Object obj)方法和lastIndexOf(Object obj)方法,前者是获得指定对象的最小的索引位置,而后者是获得指定对象的最大的索引位置,前提条件是指定的对象在List集合中具有重复的对象,否则如果在List集合中有且仅有一个指定的对象,则通过这两个方法获得的索引位置是相同的,例如执行下面的代码:src\com\mwq\TestCollection.java关键代码:public static void main(String[] args) {String a = "A", b = "B", c = "C", d = "D", repeat = "Repeat"; List<String> list = new ArrayList<String>();list.add(a); // 索引位置为0list.add(repeat); // 索引位置为1list.add(b); // 索引位置为2list.add(repeat); // 索引位置为3list.add(c); // 索引位置为4list.add(repeat); // 索引位置为5list.add(d); // 索引位置为6System.out.println(list.indexOf(repeat));System.out.println(stIndexOf(repeat));System.out.println(list.indexOf(b));System.out.println(stIndexOf(b));}src\com\mwq\TestCollection.java完整代码如下:package com.mwq;import java.util.ArrayList;import java.util.List;public class TestCollection {public static void main(String[] args) {System.out.println("开始:");String a = "A", b = "B", c = "C", d = "D", repeat = "Repeat"; List<String> list = new ArrayList<String>();list.add(a); // 索引位置为0list.add(repeat); // 索引位置为1list.add(b); // 索引位置为2list.add(repeat); // 索引位置为3list.add(c); // 索引位置为4list.add(repeat); // 索引位置为5list.add(d); // 索引位置为6System.out.println(list.indexOf(repeat));System.out.println(stIndexOf(repeat));System.out.println(list.indexOf(b));System.out.println(stIndexOf(b));System.out.println("结束!");}}在控制台将输出如下信息:15223.subList(int fromIndex, int toIndex)方法在使用subList(int fromIndex, int toIndex)方法截取现有List集合中的部分对象生成新的List集合时,需要注意的是,新生成的集合中包含起始索引位置代表的对象,但是不包含终止索引位置代表的对象,例如执行下面的代码:src\com\mwq\TestCollection.java关键代码:public static void main(String[] args) {String a = "A", b = "B", c = "C", d = "D", e = "E";List<String> list = new ArrayList<String>();list.add(a); // 索引位置为0list.add(b); // 索引位置为1list.add(c); // 索引位置为2list.add(d); // 索引位置为3list.add(e); // 索引位置为4list = list.subList(1, 3);// 利用从索引位置1 到3 的对象重新生成一个List集合for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}}src\com\mwq\TestCollection.java完整代码:package com.mwq;import java.util.ArrayList;import java.util.List;public class TestCollection {public static void main(String[] args) {System.out.println("开始:");String a = "A", b = "B", c = "C", d = "D", e = "E";List<String> list = new ArrayList<String>();list.add(a); // 索引位置为0list.add(b); // 索引位置为1list.add(c); // 索引位置为2list.add(d); // 索引位置为3list.add(e); // 索引位置为4list = list.subList(1, 3);// 利用从索引位置1 到3 的对象重新生成一个List集合for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}System.out.println("结束!");}}在控制台将输出如下信息:BC。

java中list的方法

java中list的方法

java中list的方法在 Java 中,`List` 是一个接口,它继承自 `Collection` 接口,代表着一种有序、可重复的集合。

`List` 接口有多种实现类,比较常用的包括 `ArrayList`、`LinkedList` 和 `Vector` 等。

以下是 `List` 接口提供的一些常用方法:1. 添加元素:- `boolean add(E element)`: 将指定元素添加到列表的末尾。

- `void add(int index, E element)`: 在指定位置插入指定元素。

2. 获取元素:- `E get(int index)`: 返回列表中指定位置的元素。

- `int indexOf(Object o)`: 返回指定元素在列表中首次出现的位置索引。

- `int lastIndexOf(Object o)`: 返回指定元素在列表中最后一次出现的位置索引。

3. 移除元素:- `E remove(int index)`: 移除列表中指定位置的元素。

- `boolean remove(Object o)`: 移除列表中首次出现的指定元素。

4. 判断元素是否存在:- `boolean contains(Object o)`: 判断列表中是否包含指定元素。

- `boolean isEmpty()`: 判断列表是否为空。

5. 列表大小和清空:- `int size()`: 返回列表的大小(元素个数)。

- `void clear()`: 清空列表中的所有元素。

6. 替换元素:- `E set(int index, E element)`: 将列表中指定位置的元素替换为指定元素。

7. 列表转换为数组:- `Object[] toArray()`: 将列表转换为对象数组。

- `<T> T[] toArray(T[] a)`: 将列表转换为指定类型的数组。

这些方法是 `List` 接口提供的常用方法。

arraylistjava中的用法

arraylistjava中的用法

arraylistjava中的用法ArrayList是Java集合框架中的一个重要类,它提供了一个动态数组的实现,可以方便地添加、删除和访问元素。

本文将详细介绍ArrayList在Java中的用法,包括其基本概念、创建、使用、常见操作以及注意事项。

一、基本概念ArrayList是Java中的一个动态数组,它继承自AbstractList类,实现了List接口。

ArrayList提供了一些常用的方法,如add、remove、get和iterator 等,可以方便地添加、删除、访问和遍历数组中的元素。

ArrayList的特点是存储元素的方式非常灵活,可以根据需要动态调整数组的大小,从而避免了在添加或删除大量元素时频繁创建和销毁数组所导致的问题。

二、创建ArrayList对象要创建一个ArrayList对象,可以使用以下语法:```javaArrayList<E> arrayList = new ArrayList<E>();```其中,E代表一个泛型类型,用于指定ArrayList中元素的类型。

如果不需要指定元素类型,可以使用通配符语法:```javaArrayList<Object> arrayList = new ArrayList<>();```三、使用ArrayList对象使用ArrayList对象非常简单,只需要调用其提供的方法即可。

例如,要向ArrayList中添加一个元素,可以使用add()方法:```javaarrayList.add(element);```要访问ArrayList中的元素,可以使用get()方法:```javaelement = arrayList.get(index);```其中,index表示要访问的元素的索引。

要遍历ArrayList中的所有元素,可以使用迭代器(Iterator)对象:```javaIterator<E> iterator = arrayList.iterator();while (iterator.hasNext()) {element = iterator.next();// 处理元素}```四、常见操作1. 添加元素:使用add()方法向ArrayList中添加元素。

list在java中的用法

list在java中的用法

list在java中的用法在Java中,List是一个接口,它代表着有序的集合。

它允许存储重复的元素,并且能够根据元素的索引来访问和操作集合中的元素。

常用的实现类有ArrayList和LinkedList。

以下是List在Java中的一些主要用法:1. 创建List对象:List<T> list = new ArrayList<T>(); // 创建一个ArrayList对象 List<T> list = new LinkedList<T>(); // 创建一个LinkedList对象2. 添加元素到List中:list.add(element); // 添加元素到末尾list.add(index, element); // 在指定位置插入元素3. 获取List中的元素:T element = list.get(index); // 获取指定位置的元素4. 更新List中的元素:list.set(index, element); // 更新指定位置的元素5. 删除List中的元素:list.remove(index); // 删除指定位置的元素list.remove(element); // 删除指定元素6. 判断List是否包含指定元素:boolean contains = list.contains(element);7. 获取List的大小:int size = list.size();8. 遍历List中的元素:for (T element : list) {// 处理每个元素}9. 将List转换为数组:T[] array = list.toArray(new T[list.size()]);10. 使用迭代器遍历List:Iterator<T> iterator = list.iterator();while (iterator.hasNext()) {T element = iterator.next();// 处理每个元素}这些是List在Java中的主要用法,通过它们可以方便地对集合中的元素进行增删改查操作。

java中集合知识点总结

java中集合知识点总结

java中集合知识点总结1. Collection接口Collection接口是Java中集合类的基本接口,它定义了一组通用的操作方法,包括添加、删除、查找等操作。

Collection接口有三个主要的子接口:List、Set和Queue。

(1) ListList是一种有序的集合,它允许重复的元素,并且可以按照索引访问元素。

List接口中有常用的实现类:ArrayList、LinkedList和Vector。

其中,ArrayList是基于数组实现的,它支持快速的随机访问和插入操作;LinkedList是基于双向链表实现的,它支持快速的插入和删除操作;Vector是线程安全的类,它支持并发访问。

(2) SetSet是一种不允许重复元素的集合,它用来存储唯一的元素。

Set接口中有常用的实现类:HashSet、LinkedHashSet和TreeSet。

其中,HashSet是基于哈希表实现的,它提供了快速的查找和插入操作;LinkedHashSet是基于哈希表和链表实现的,它保持了元素的插入顺序;TreeSet是基于红黑树实现的,它提供了有序的集合。

(3) QueueQueue是一种先进先出的集合,它用来存储元素,并且支持插入和删除操作。

Queue接口中有常用的实现类:LinkedList和PriorityQueue。

其中,LinkedList可以作为Queue来使用,它支持快速的插入和删除操作;PriorityQueue是基于堆实现的,它提供了优先级队列的功能。

2. Map接口Map接口是Java中的映射表,它用来存储键值对的数据。

Map接口中有常用的实现类:HashMap、LinkedHashMap、TreeMap和Hashtable。

其中,HashMap是基于哈希表实现的,它提供了快速的查找和插入操作;LinkedHashMap是基于哈希表和链表实现的,它保持了键值对的插入顺序;TreeMap是基于红黑树实现的,它提供了有序的映射表;Hashtable是线程安全的类,它支持并发访问。

java list 命名规则

java list 命名规则在Java编程中,列表(List)是一种非常常用的数据结构,它允许我们存储和操作不同类型的元素。

为了更好地使用列表,了解其命名规则以及常用方法和注意事项是非常重要的。

一、列表的命名规则在Java中,列表的命名通常遵循以下规则:1.首字母大写:列表类名的首字母应大写。

2.驼峰命名法:列表类名的第二个字母小写,后续字母大写。

例如:ArrayList、LinkedList等。

3.描述性命名:列表类名应具有一定的描述性,便于理解其功能。

如:ArrayList表示基于数组实现的列表,LinkedList表示基于双向链表实现的列表。

二、列表的常用方法及其用途1.添加元素:列表允许向其中添加元素。

常用的添加方法有:- add(int index, E element):在指定索引处添加元素,如果索引越界,抛出IndexOutOfBoundsException。

- addAll(Collection<? extends E> c):将指定集合的所有元素添加到列表中。

2.删除元素:列表允许删除其中的元素。

常用的删除方法有:- remove(int index):删除指定索引处的元素,如果索引越界,抛出IndexOutOfBoundsException。

- remove(Object o):删除列表中第一个匹配的元素,如果列表中没有匹配的元素,抛出IllegalArgumentException。

- removeAll(Collection<?> c):删除列表中所有与指定集合相同元素的实例。

3.修改元素:列表允许修改指定索引处的元素。

常用的修改方法有:- set(int index, E element):将指定索引处的元素替换为给定的元素。

4.获取元素:列表允许获取指定索引处的元素。

常用的获取方法有:- get(int index):返回指定索引处的元素,如果索引越界,抛出IndexOutOfBoundsException。

list集合常用的10多种数据处理用法

list集合常用的10多种数据处理用法List集合是Java编程语言中常用的数据结构之一,它提供了一种有序、动态可变的存储数据的方式。

下面将介绍10多种常用的List集合的数据处理用法。

1. 添加元素:使用add()方法向List集合中添加元素,可以在列表末尾添加,也可以在指定位置插入。

2. 获取元素:使用get()方法可以根据索引获取List集合中的元素,索引从0开始。

可以通过循环遍历获取所有元素。

3. 修改元素:使用set()方法可以根据索引修改List集合中的元素。

4. 删除元素:使用remove()方法可以根据索引删除List集合中的元素,也可以根据元素内容删除。

使用clear()方法可以清空整个列表。

5. 判断元素是否存在:使用contains()方法可以判断List集合中是否存在某个元素。

6. 获取列表长度:使用size()方法可以获取List集合的长度,即元素的个数。

7. 判断列表是否为空:使用isEmpty()方法可以判断List集合是否为空。

8. 列表的排序:使用sort()方法可以对List集合进行排序。

可以使用Collections类的静态方法sort()来实现。

9. 列表的截取:使用subList()方法可以截取List集合的子列表,传入起始索引和终止索引。

10. 列表元素的查找:使用indexOf()方法可以根据元素内容查找其在List集合中的索引。

11. 列表的遍历:使用for-each循环或者迭代器遍历List集合,可以依次访问每个元素。

12. 列表的拷贝:使用addAll()方法可以将一个List集合的元素全部拷贝到另一个List集合中。

13. 列表元素的替换:使用replaceAll()方法可以将List集合中满足指定条件的元素替换为新元素。

List集合是一个非常实用的数据结构,它提供了丰富的方法来处理数据。

通过熟练使用List集合的各种方法,可以更高效地操作和管理数据。

Java集合排序及java集合类详解(Collection、List、Map、Set)

Java集合排序及java集合类详解(Collection, List, Set, Map)摘要内容Java里面最重要,最常用也就是集合一部分了。

能够用好集合和理解好集合对于做Java程序的开发拥有无比的好处。

本文详细解释了关于Java中的集合是如何实现的,以及他们的实现原理。

关键字:Collection , List ,Set , Map , 集合,框架。

目录1 集合框架 (2)1.1 集合框架概述 (2)1.1.1 容器简介 (2)1.1.2 容器的分类 (4)1.2 Collection (6)1.2.1 常用方法 (6)1.2.2 迭代器 (8)1.3 List (10)1.3.1 概述 (10)1.3.2 常用方法 (11)1.3.3 实现原理 (15)1.4 Map (18)1.4.1 概述 (18)1.4.2 常用方法 (18)1.4.3 Comparable 接口 (23)1.4.4 实现原理 (25)1.4.5 覆写hashCode() (29)1.5 Set (33)1.5.1 概述 (33)1.5.2 常用方法 (34)1.5.3 实现原理 (38)1.6 总结:集合框架中常用类比较 (39)2 练习 (40)3 附录:排序 (41)1集合框架1.1集合框架概述1.1.1容器简介到目前为止,我们已经学习了如何创建多个不同的对象,定义了这些对象以后,我们就可以利用它们来做一些有意义的事情。

举例来说,假设要存储许多雇员,不同的雇员的区别仅在于雇员的身份证号。

我们可以通过身份证号来顺序存储每个雇员,但是在内存中实现呢?是不是要准备足够的内存来存储1000个雇员,然后再将这些雇员逐一插入?如果已经插入了500条记录,这时需要插入一个身份证号较低的新雇员,该怎么办呢?是在内存中将500条记录全部下移后,再从开头插入新的记录? 还是创建一个映射来记住每个对象的位置?当决定如何存储对象的集合时,必须考虑如下问题。

java list泛型的用法

java list泛型的用法Java是一种面向对象的编程语言,提供了丰富的类和接口用于开发各种类型的应用程序。

其中,List是一种非常常用的集合类,用于存储一组元素。

在Java中,可以使用泛型来定义List的类型,使其能够存储不同类型的对象。

本文将介绍Java List泛型的用法。

一、泛型的概念泛型是一种在Java中引入的概念,用于增强类型安全性。

通过使用泛型,可以在编译期间检测出类型不匹配的错误,避免在运行时抛出类型转换异常。

二、使用泛型的好处1. 提高类型安全性:使用泛型可以确保集合中只存储指定类型的对象。

2. 代码重用性:使用泛型可以编写通用的代码,使得代码可以适用于不同类型的数据。

三、List泛型的基本用法在Java中,可以使用以下语法声明一个具有泛型的List:List<T>,其中T是一个类型参数。

通过指定具体的类型参数,可以将List限定为存储特定类型的对象。

示例代码如下:```javaList<String> stringList = new ArrayList<>(); // 声明一个存储String 类型对象的ListList<Integer> integerList = new ArrayList<>(); // 声明一个存储Integer类型对象的List```通过使用泛型,List将只能存储指定类型的对象。

如果尝试将不兼容的对象添加到List中,将在编译期间报错。

四、使用泛型限定类型除了可以使用具体的类型作为泛型参数外,还可以使用通配符来限定使用的类型范围。

在Java中,可以使用 "?" 来表示通配符。

以下是使用通配符的示例:```javaList<?> list = new ArrayList<>(); // 声明一个可以存储任意类型对象的ListList<? extends Number> numberList = new ArrayList<>(); // 声明一个可以存储Number类型及其子类对象的ListList<? super Integer> integerList = new ArrayList<>(); // 声明一个可以存储Integer类型及其父类对象的List```通过使用通配符,可以实现更灵活的类型限定,使得List能够存储更多种类的对象。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java集合框架之List详解ArrayList首先我们熟悉下ArrayList类中常用方法的使用。

1)添加:public boolean add(Object e):将指定的元素(对象)添加到此列表的尾部2)获取:public Object get(int index):返回此列表中指定位置(索引)上的元素。

3)元素的个数:public int size():返回此列表中的元素数。

4)清空:public void clear():移除此列表中的所有元素。

此调用返回后,列表将为空。

5)是否为空:public boolean isEmpty():如果此列表中没有元素,则返回 true 6)移除(删除):public E remove(int index):移除此列表中指定位置上的元素。

向左移动所有后续元素(将其索引减 1)。

7)移除(重载):public boolean remove(Object o):移除此列表中首次出现的指定元素(如果存在)。

如果列表不包含此元素,则列表不做改动。

更确切地讲,移除满足 (o==null ? get(i)==null : o.equals(get(i))) 的最低索引的元素(如果存在此类元素)。

如果列表中包含指定的元素,则返回 true (或者等同于这种情况:如果列表由于调用而发生更改,则返回 true)。

8)获得索引:public int indexOf(Object o): 返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。

更确切地讲,返回满足(o==null ? get(i)==null : o.equals(get(i))) 的最低索引 i ,如果不存在此类索引,则返回 -1。

如何使用这些方法,代码如下:import java.util.ArrayList;public class ArrayListTest {public static void main(String[] args) {ArrayList list=new ArrayList();/** 添加*/list.add("hello");list.add(" world");list. add(" welcome");/** 获得*/String s1=(String)list.get(0);String s2=(String)list.get(1);String s3=(String)list.get(2);System.out.println(s1+s2+s3);/** 元素的个数*/System.out.println(list.size());/** 清空*/list.clear();/** 是否为空* 刚清空了,所以打印true*/System.out.println(list.isEmpty());System.out.println("-----------------");list.add("aaa");list.add("bbb");list.add("ccc");/** 获得索引*/System.out.println(list.indexOf("bbb"));/** 移除*/list.remove(1);for(int i=0;i<list.size();i++){System.out.print(list.get(i)); //打印Arraylist中的元素}System.out.println();//换行/** 移除重载*///list.add("ddd");list.remove("aaa");for(int i=0;i<list.size();i++){System.out.print(list.get(i)); //打印Arraylist中的元素}}}下面我们来看看,把ArrayList其他方法1.转换数组:public Object[] toArray():按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组。

由于此列表不维护对返回数组的任何引用,,因而它将是“安全的”。

(换句话说,此方法必须分配一个新的数组)。

因此,调用者可以自由地修改返回的数组。

此方法担当基于数组的API 和基于collection 的API 之间的桥梁。

下面的代码,来看看toArray()方法的使用:import java.util.ArrayList;public class ArrayListTest4 {public static void main(String[] args) {ArrayList list=new ArrayList();list.add(1);list.add(2);list.add(3);list.add(4);/** 我们不能把Object[]转换为Interger[]*/Object[] o=list.toArray();for(int i=0;i<o.length;i++){System.out.println((Integer)o[i]);}}}我们再看如下代码,来看看集合中存放的是什么?import java.util.ArrayList;public class ArrayListTest3 {public static void main(String[] args) {ArrayList list=new ArrayList();list.add(new Point(1,2));list.add(new Point(3,4));list.add(new Point(5,6));for(int i=0;i<list.size();i++){System.out.println(((Point)list.get(i)));}System.out.println(list);}}class Point{int x;int y;public Point(int x,int y) {this.x=x;this.y=y;}public String toString() {return this.x+","+this.y;}}总结:集合中存放的依然是对象的引用而不是对象本身。

ArrayList的底层实现是什么原理?ArrayListList底层采用数组实现,当使用不带参数的构造方法生成ArrayList对象时,实际上会在底层生成一个长度为10的Object类型数组。

如果增加的元素个数超过了10个,那么ArrayList底层会新生成一个数组,长度为原数组的1.5倍+1,然后将原数组的内容复制到新数组当中,并且后续增加的内容都会放到新数组当中。

当新数组无法容纳增加的元素时,复该过程。

对于ArrayList元素的删除操作,需要将被删除元素的后续元素向前移动,代价比较高。

基本上说ArrayList是一个数组。

注意:在jdk1.5之前,没有包装类自动装箱拆箱,集合类当中只能放置对象的引用,无法放置原生数据类型,我们需要使用原生数据类型的包装类才能加入到集合当中。

还有在集合当中放置的都是Object类型,因此取出来的也是Object类型,那么必须要使用强制类型转换将其转换为真正的类型(放置进去的类型)。

LinkedListLinkedList的很多方法使用和ArrayList的方法一样,因为实现了接口List。

还有一些其他常用的方法。

1)添加的几种常用方法:i.public boolean add(E e) :将指定元素添加到此列表的结尾。

此方法等效于addLast(E)。

ii.public void add(int index, E element): 在此列表中指定的位置插入指定的元素。

移动当前在该位置处的元素(如果有),所有后续元素都向右移(在其索引中添加.iii.public void addLast(E e): 将指定元素添加到此列表的结尾, 此方法等效于add(E)。

iv.public void addFirst(E e) : 将指定元素插入此列表的开头2)移除的几种常用方法:i.public E remove(int index):移除此列表中指定位置处的元素。

将任何后续元素向左移(从索引中减1)。

返回从列表中删除的元素。

ii.public boolean remove(Object o) 从此列表中移除首次出现的指定元素(如果存在)。

如果列表不包含该元素,则不作更改。

更确切地讲,移除具有满足(o==null ? get(i)==null : o.equals(get(i))) 的最低索引i 的元素(如果存在这样的元素)。

如果此列表已包含指定元素(或者此列表由于调用而发生更改),则返回true。

3) 替换方法:public E set(int index, E element): 将此列表中指定位置的元素替换为指定的元素.4) 查找:public E get(int index):返回此列表中指定位置处的元素。

我们对于上面的几个方法,用代码来看看如何使用:import java.util.LinkedList;public class LinkedListTest {public static void main(String[] args) {LinkedList list=new LinkedList();/*** 添加的几种方法*/list.add("hello");list.add("world");list.add("welcome");list.addFirst("hello0");list.addLast("welcome1");list.add(1,"haha");System.out.println("最初的集合"+list);/*** 移除的几种方法*/list.remove(1);list.remove("welcome");System.out.println("变化后的集合"+list);/*** 替换set()* 获取get()*/String value=(String)list.get(2);list.set(3, value+"changed");System.out.println("最后的集合"+list);}}其实LinkedList的底层是一种链表形式,链表形式有单向链表和双向链表,我们看看单向链表的实现方式,我们看看如下代码:public class Node {String data;Node next;public Node(String data) {this.data=data;}}public class NodeTest {public static void main(String[] args) {Node node1 = new Node("node1");Node node2 = new Node("node2");Node node3 = new Node("node3");node1.next = node2;node2.next = node3;System.out.println("单向链表:" + node1.data + "," + node1.next.data + ","+ node1.next.next.data);System.out.println("------插入--------");Node node4=new Node("node4");node1.next=node4;node4.next=node2;System.out.println("插入后结果:"+node1.data + "," + node1.next.data + ","+ node1.next.next.data+","+node1.next.next.next.data);System.out.println("----------删除------------");node1.next=node2;node4.next=null;System.out.println("删除后结果:"+node1.data + "," + node1.next.data + ","+ node1.next.next.data+",");}}现在我们再看看双向链表的实现方式:public class DoubleNode {DoubleNode previous;//前一个对象String data;//当前数据DoubleNode next;//后一个对象public DoubleNode(String data) {this.data=data;}}public class DoubleNodeTest {public static void main(String[] args) {DoubleNode node1=new DoubleNode("node1");DoubleNode node2=new DoubleNode("node2");DoubleNode node3=new DoubleNode("node3");node1.previous=node3;node1.next=node2;node2.previous=node1;node2.next=node3;node3.previous=node2;node3.next=node1;System.out.println(node1.data+","+node1.previous.data+","+n ode1.previous.previous.data+","+node1.previous.previous.previo us.data);System.out.println(node1.data+","+node1.next.data+","+node1 .next.next.data+","+node1.next.next.next.data);System.out.println("-----------插入---------");DoubleNode node4=new DoubleNode("node4");node1.next=node4;node4.previous=node1;node4.next=node2;node2.previous=node4;System.out.println(node1.data+","+node1.previous.data+","+node 1.previous.previous.data+","+node1.previous.previous.previous. data+node1.previous.previous.previous.previous.data);System.out.println(node1.data+","+node1.next.data+","+node1 .next.next.data+","+node1.next.next.next.data+","+node1.next.n ext.next.next.data);System.out.println("--------------删除--------------");node1.next=node2;node2.previous=node1;node4.next=null;node4.previous=null;System.out.println(node1.data+","+node1.previous.data+","+n ode1.previous.previous.data+","+node1.previous.previous.previo us.data);System.out.println(node1.data+","+node1.next.data+","+node1 .next.next.data+","+node1.next.next.next.data);}}ArrayList与LinkedList的区别从以上代码可以看出,ArrayList与LinkedList的底层实现是不一样的,我们现在对ArrayList 与LinkedList进行比较分析:a)ArrayList底层采用数组实现,LinkedList底层采用双向链表实现。

相关文档
最新文档