第14章 集合框架(1)-List集合的各种类

1.概述
1.1.Java集合框架的由来
1.2.什么是集合框架?
1.3.为什么需要集合框架
1.4.常用的框架接口规范
2.Vector类
2.1.存储原理
2.2.构造方法
2.3.常用方法
3.Stack类
3.1.什么是栈
3.2.栈的构造方法和常用方法
4.ArrayList类
5.LinkedList类
5.1定义
5.2.常用方法

1.概述

1.1.Java集合框架的由来

刚开始的时候java只有Vetor,Stack,Hashtable这些同容器类用来保存大量的对象。
容器类是可以存储多个数据的类,数组也是一个容器,但是数组有一定的缺陷,所有提出了容器概念
怎么学习集合框架呢?
集合框架是非常简单,但是又非常重要的一个对象。
学习集合框架只要记住:拿来主义

1.2.什么是集合框架?

集合框架是为了表示和操作而规定集合而规定的一种统一的标准的体系结构。
任何集合框架都要包含三大块内容:
对外的接口
接口的实现
对集合应用的算法(底层都对应这一种数据结构的算法)

1.3.为什么需要集合框架

1.提供功能的复用(java.util包)
2.让程序员能专注于开发,而不是数据结构和算法

1.4.常用的框架接口规范

1.集合中存储的对象称之为集合元素
2.常用的集合类
-Set(集):集合中的对象不按特定方式排序,不允许元素重复
-List(列表):集合中的元素按照索引位置排序,不允许元素重复
-Map(映射):集合中的每一个元素都包含一对key和value对象,不允许key对象重复,值对象可以重复

2.Vector类

在Java2.0之前,还没有集合框架的概念,但是要存储多个数据,于是就有了一个Vector类。Vector类底层其实就是一个Object数组,Vector类中的方法是支持同步的。
Vector类提供了实现可增长数组的功能,随着更多元素的加入其中,数组变得更大,在删除一些元素之后,数组就变得小

2.1.存储原理

通过源码分析,发现Vector类中有一个Object[]类型数组,protected Object[] elementData;
1.表面上把数据存储到Vector对象中,其实底层依然是把数据存储到Object数组中的
2.我们发现数组的元素类型是Object类型,意味着集合中能存储任意对象的对象。不要要注意,集合中只能存储对象,不能存储基本数据类型的值。

2.2.构造方法

Vector类提供三种常用构造方法
1.public Vector();

构造一个空向量,默认的数组大小是10

2.public Vector(int Capacity)

用Capacity指定Vector默认容量的大小,由于增加数据导致容量增加时,每次容量会增加一倍

3.public Vector(int Capacity, int capacityIncrement)

Capacity是默认容量大小,capacityIncrement是每次容量增加时的增量值

2.3.常用方法

Vector的常用方法,在其他集合中也大部分是通用的,而常用方法是分成四种的,即:增、删、查、改
1.增加
boolean add(Object e)

将指定元素增加到集合的末尾,等价与addElement()方法

voild add(int index, Object element)

在集合的指定位置插入指定元素

boolean addAll(Collection c)

把一个集合中的元素去全部添加到当前集合中来

注意:add()也可以追加一个集合,但是追加的这个集合是当做一个集合中的一个元素来的,addAll()是把一个集合中的所用元素跟当前集合的所有元素并排,同等位置存放
示例:

 1 import java.util.Vector;
 2
 3 /**
 4  * 演示Vector类中的增加方法
 5  * Created by cenyu on 16-11-19.
 6  */
 7 public class TestVector {
 8     public static void main(String[] args) {
 9         Vector v = new Vector();
10         v.add("A");
11         v.add("B");
12         v.add("C");
13         System.out.println(v); //[A, B, C]
14         //将指定元素增加到集合的末尾
15         v.add("D");
16         System.out.println(v);//[A, B, C, D]
17         //在集合的指定位置插入指定元素
18         v.add(2,"B");
19         System.out.println(v);//[A, B, B, C, D]
20         //把一个集合中的元素去全部添加到当前集合中来
21         Vector v2 = new Vector();
22         v2.add(1);
23         v2.add(2);
24         v2.add(3);
25         v.addAll(v2);
26         System.out.println(v);//[A, B, B, C, D, 1, 2, 3]
27         v.add(v2);
28         System.out.println(v);//[A, B, B, C, D, 1, 2, 3, [1, 2, 3]]
29     }
30 }

2.删除
Object remove(int index)

按下标删除指定位置的元素,返回被删除的那个元素

boolean remove(Object o)

按值删除指定元素

boolean removeAll(Collection c)

从当前集合中移除包含在指定集合 c 中的所有元素

boolean retainAll(Collection c)

在当前集合中只保留和集合c有交集的元素

示例

 1 import java.util.Vector;
 2
 3 /**
 4  * 演示Vector类中的删除方法
 5  * Created by cenyu on 16-11-19.
 6  */
 7 public class TestVector {
 8     public static void main(String[] args) {
 9         Vector v = new Vector();
10         v.add("A");
11         v.add("B");
12         v.add("C");
13         //在集合的指定位置插入指定元素
14         v.add(2,"B");
15         //把一个集合中的元素去全部添加到当前集合中来
16         Vector v2 = new Vector();
17         v2.add(1);
18         v2.add(2);
19         v2.add(3);
20         v.add(v2);
21         System.out.println(v);//[A, B, B, C, [1, 2, 3]]
22
23
24
25         //按下标删除指定位置的元素,返回被删除的那个元素
26         System.out.println(v.remove(2));//B
27         //按值删除指定元素
28         v.remove("C");
29         System.out.println(v);//[A, B, [1, 2, 3]]
30 //        //在当前集合中只保留和集合v2有交集的元素
31 //        v.remove(v2);
32 //        System.out.println(v);//[A, B]
33         v.add(1);
34         v.add(2);
35         v.retainAll(v2);
36         System.out.println(v);//[1, 2]
37
38     }
39 }

3.查询
int size()

返回当前集合中存储的元素个数

boolean isEmpty()

判断当前集合中元素个数是否为0

Object get(int index)

查询指定索引位置的元素

Object[] toArray()

把集合对象转换为Object数组

4.修改
Object set(int index, Object element)

修改当前集合中指定索引位置的元素,返回被替换的那个旧元素

示例:

 1 import java.util.Arrays;
 2 import java.util.Vector;
 3
 4 /**
 5  * 演示Vector类中的查询和修改方法
 6  * Created by cenyu on 16-11-19.
 7  */
 8 public class TestVector {
 9     public static void main(String[] args) {
10         Vector v = new Vector();
11         v.add("A");
12         v.add("B");
13         v.add("C");
14
15         //返回当前集合中存储的元素个数
16         System.out.println(v.size());//3
17         //判断当前集合中元素个数是否为0
18         System.out.println(v.isEmpty());//false
19         //查询指定索引位置的元素
20         System.out.println(v.get(1));//B
21         //修改当前集合中指定索引位置的元素,返回被替换的那个旧元素
22         System.out.println(v.set(0,"B"));//A
23         System.out.println(v);//[B, B, C]
24         //把集合对象转换为Object数组
25         System.out.println(Arrays.toString(v.toArray()));//[B, B, C]
26     }
27 }

3.Stack类

3.1.什么是栈

*栈(stack):数据机构的一种,存储特点是:后进先出,Last In First Out.
stack类表示后进先出(LIFO)的对象栈
栈的思想是规定一个底部,所有的数据从顶部进入,然后从顶部获取数据。
栈结构在生活中的体现:
1、QQ消息,A、B、C先后发来消息,后发的在上面显示
2、手枪弹夹的装弹和发射

要来实现栈的存储,底层可以使用数组来存储,也可以使用链表来存储。
该类继承于java.util.Vector

3.2.栈的构造方法和常用方法

栈是一种比较简单的操作,只有一种构造器方法和五种常用操作方法
1.构造器
Stack()

创建一个空堆栈

2.操作方法
1.boolean empty()

测试堆栈是否为空

2.Object peek()

查看堆栈的顶部对象,只是查看不进行任何操作

3.Object pop()

移除堆栈顶部的对象,并返回移除的这个对象

4.Object push()

把一个元素压入堆栈顶部

5.int search(Object o)

返回对象在堆栈中的位置,以1为基数,后进的为1,先进的往后排

示例

 1 import java.util.Stack;
 2
 3 /**
 4  * 测试Stack类的方法
 5  * Created by cenyu on 16-11-20.
 6  */
 7 public class TestStack {
 8     public static void main(String[] args) {
 9         //创建一个空堆栈
10         Stack s = new Stack();
11         //测试堆栈是否为空
12         System.out.println(s.empty());  //true
13         //把一个元素压入堆栈顶部
14         s.push("A");
15         s.push("B");
16         s.push("C");//C是最后添加的
17         System.out.println(s.empty());//true
18         //查看堆栈的顶部对象,只是查看不进行任何操作
19         System.out.println(s.peek()); //C
20         //移除堆栈顶部的对象,并返回移除的这个对象
21         System.out.println(s.pop());//C
22         System.out.println(s); //[A, B]
23         //返回对象在堆栈中的位置,以1为基数,后进的为1,先进的往后排
24         System.out.println(s.search("B"));//1
25     }
26 }

4.ArrayList类

ArrayList类是Java集合框架出现之后用来取代Vector类的,二者在底层原理上是一模一样的。
区别:
Vector:所有的方法都使用了synchronized修饰符,线程安全但是性能较低,使用与多线程环境
ArrayList:所有的方法都没有synchronized修饰符,线程不安全,但是性能较高
即使在多线程环境下,我们也不使用Vector类:
ArrayList list = Collections.synchronizedList(new ArrayList(……));
常用的方法可以参照Vector

5.LinkedList类

5.1定义

LinkedList类是双向链表,单向队列,双向队列,栈的实现类
LinkedList类实现单向队列和双向队列的接口,自身提供了栈操作的方法,链表的操作方法

5.2.常用方法

在LinkedList类中存在很多方法,但是功能都是相同的,LinkedList表示了很多中数据结构的实现,每一种数据结构的操作名字不同

具体方法转载了一篇文章

时间: 2024-10-07 07:04:21

第14章 集合框架(1)-List集合的各种类的相关文章

集合框架-数组与集合互转

数组和集合类同是容器,有何不同? 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的. 数组中可以对象和存储基本数据类型,集合只能存储对象. 集合框架-数组转成集合 java.util 类 Arrays * Arrays:用于操作数据的工具类提供了很多常见的方法比如排序,搜索等. * 该类中的方法都是静态的. * 数组转成集合   Arrays.asList([]); * 好处:可以使用集合list的方法来操作数组中的元素.可以使用集合 改查方法,只要不改变数组长度都可以. * 弊端:不可

I学霸官方免费教程三十一:Java集合框架之List集合

集合框架 在数组的使用过程中可以看到,想要向数组中插入元素和删除元素非常麻烦,而且数组的长度是无法改变的.java为我们提供了批量存储数据更加方便的容器,就是集合.集合和数组的作用一样,都是为了使用一个变量来存储一批数据的:但集合使用起来更加方便,而且集合的长度是可以变化的. List接口 List集合可以存储有序的,可重复的数据:常用的子类是ArrayList和LinkedList两个类 ArrayList类 这是一个底层由数组实现的集合类,是对数组进行了封装. 实例: package col

Java集合框架之Collection集合

一.引言 Java集合框架和IO框架一样,看似很庞杂的体系框架,但是当你逐一深入每个集合的用法后,就能明显的看出他们之间的区别和联系.最后拎出一个框架图,就一目了然了.由于Java的集合框架分两大系Collection系和Map系,之所以要分开是因为Collection内存储的是线性集合,而Map的元素是以键值对(Key-Value)的形式存的.其实Map和Collection内部实现是存在联系的,学完就懂了.本文主要介绍的Collection中常用的集合的用法以及之间的区别. 二.Collec

I学霸官方免费教程三十:Java集合框架之List集合

集合框架 在数组的使用过程中可以看到,想要向数组中插入元素和删除元素非常麻烦,而且数组的长度是无法改变的.java为我们提供了批量存储数据更加方便的容器,就是集合. 集合和数组的作用一样,都是为了使用一个变量来存储一批数据的:但集合使用起来更加方便,而且集合的长度是可以变化的. List接口 List集合可以存储有序的,可重复的数据: 常用的子类是ArrayList和LinkedList两个类 ArrayList类 这是一个底层由数组实现的集合类,是对数组进行了封装. 实例: package c

(1)StringBuilder类和StringBuffer类 (2)日期相关的类 (3)集合框架 (4)List集合

1.StringBuilder类和StringBuffer类(查手册会用即可)1.1 基本概念 由于String类描述的字符串内容无法更改,若程序中出现大量类似的字符串时需要申请独立的内存空间单独保存,此时对内存空间的消耗比较大. 为了节省内存空间希望对字符串内容本身直接进行更改,则需要使用java.lang.StringBuilder类或者java.lang.StringBuffer类. 其中StringBuffer类是从jdk1.0开始存在,是一个线程安全的可变字符序列,效率比较低 其中St

集合框架之链表集合算法

链表集合算法: 1.链=引用 2.链表集合与数组集合的区别:在增值方面,数组集合的速度比链表集合算法[学Java,到凯哥学堂kaige123.com]的速度要快:但是链表集合在增删值和修改值方面要更灵活,它的原理就好比链条. 3.链表的分类: 3.1单链集合(了解即可):上家能找到下家,但是下家找不到上家,即通过上一个数组可以找到下一个数组,但是没办法通过下一个数组找到上一个数组.如下图: 3.2双链集合:上家能找到下家,下家也能找到上家.如下图: 4.代码实现(以双链为例): 4.1添加值 4

I学霸官方免费教程三十三:Java集合框架之Map集合

Map接口 Map集合采用键值对(key-value)的方式存储数据,其中键不可以重复.值可以重复. 常用类有HashMap.TreeMap和Properties HashMap类 假如,现在我有一个集合,集合中存储着一批WiFi的名称和密码,现在要求通过名称快速找到密码.这样的需求使用List集合实现起来非常困难,Java为我们提供了另一种形式的集合,可以很好的解决这样的问题.就是Map集合. 实例: package map.hashMap; import java.util.HashMap;

I学霸官方免费教程三十二:Java集合框架之Set集合

Set接口 Set集合是无序的.元素不可重复的结合常用集合类有HashSet和TreeSet HashSet类常用的两种List集合各有各的优点,那么有没有同时具备这两种List集合的优点的集合呢?答案是肯定的,就是Set集合. 实例: package collection.set.hashSet; import java.util.HashSet; import java.util.Iterator; /**  * 演示HashSet  * @author 学霸联盟 - 赵灿  */ publ

集合框架之数组集合算法

如何检测程序的健康程度? 如果想要知道程序运行所占的CPU和内存的情况可以使用飞行器,这样就可以知道程序的稳定性了.在JDK的bin目录下可以找到飞行器.如下图: 数组集合算法: 1.数组与集合的区别和联系: 数组是有限存储(规定了数组长度就只能存储那么多值),而集合是无限存储,但其实集合也是由数组做成的. 2.数组集合算法的原理: 当向集合里面存储一个值时,集合里面会为其申请一个适当长度的数组来存储,第二次存储值时,如果数组的长度不足以存储第二次的值,就重新申请一个长一点的数组,先把原来的数组