第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()是把一个集合中的所用元素跟当前集合的所有元素并排,同等位置存放
示例:
import java.util.Vector; /**
* 演示Vector类中的增加方法
* Created by cenyu on 16-11-19.
*/
public class TestVector {
public static void main(String[] args) {
Vector v = new Vector();
v.add("A");
v.add("B");
v.add("C");
System.out.println(v); //[A, B, C]
//将指定元素增加到集合的末尾
v.add("D");
System.out.println(v);//[A, B, C, D]
//在集合的指定位置插入指定元素
v.add(2,"B");
System.out.println(v);//[A, B, B, C, D]
//把一个集合中的元素去全部添加到当前集合中来
Vector v2 = new Vector();
v2.add(1);
v2.add(2);
v2.add(3);
v.addAll(v2);
System.out.println(v);//[A, B, B, C, D, 1, 2, 3]
v.add(v2);
System.out.println(v);//[A, B, B, C, D, 1, 2, 3, [1, 2, 3]]
}
}
2.删除
Object remove(int index)
按下标删除指定位置的元素,返回被删除的那个元素
boolean remove(Object o)
按值删除指定元素
boolean removeAll(Collection c)
从当前集合中移除包含在指定集合 c 中的所有元素
boolean retainAll(Collection c)
在当前集合中只保留和集合c有交集的元素
示例
import java.util.Vector; /**
* 演示Vector类中的删除方法
* Created by cenyu on 16-11-19.
*/
public class TestVector {
public static void main(String[] args) {
Vector v = new Vector();
v.add("A");
v.add("B");
v.add("C");
//在集合的指定位置插入指定元素
v.add(2,"B");
//把一个集合中的元素去全部添加到当前集合中来
Vector v2 = new Vector();
v2.add(1);
v2.add(2);
v2.add(3);
v.add(v2);
System.out.println(v);//[A, B, B, C, [1, 2, 3]] //按下标删除指定位置的元素,返回被删除的那个元素
System.out.println(v.remove(2));//B
//按值删除指定元素
v.remove("C");
System.out.println(v);//[A, B, [1, 2, 3]]
// //在当前集合中只保留和集合v2有交集的元素
// v.remove(v2);
// System.out.println(v);//[A, B]
v.add(1);
v.add(2);
v.retainAll(v2);
System.out.println(v);//[1, 2] }
}
3.查询
int size()
返回当前集合中存储的元素个数
boolean isEmpty()
判断当前集合中元素个数是否为0
Object get(int index)
查询指定索引位置的元素
Object[] toArray()
把集合对象转换为Object数组
4.修改
Object set(int index, Object element)
修改当前集合中指定索引位置的元素,返回被替换的那个旧元素
示例:
import java.util.Arrays;
import java.util.Vector; /**
* 演示Vector类中的查询和修改方法
* Created by cenyu on 16-11-19.
*/
public class TestVector {
public static void main(String[] args) {
Vector v = new Vector();
v.add("A");
v.add("B");
v.add("C"); //返回当前集合中存储的元素个数
System.out.println(v.size());//3
//判断当前集合中元素个数是否为0
System.out.println(v.isEmpty());//false
//查询指定索引位置的元素
System.out.println(v.get(1));//B
//修改当前集合中指定索引位置的元素,返回被替换的那个旧元素
System.out.println(v.set(0,"B"));//A
System.out.println(v);//[B, B, C]
//把集合对象转换为Object数组
System.out.println(Arrays.toString(v.toArray()));//[B, B, C]
}
}
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,先进的往后排
示例
import java.util.Stack; /**
* 测试Stack类的方法
* Created by cenyu on 16-11-20.
*/
public class TestStack {
public static void main(String[] args) {
//创建一个空堆栈
Stack s = new Stack();
//测试堆栈是否为空
System.out.println(s.empty()); //true
//把一个元素压入堆栈顶部
s.push("A");
s.push("B");
s.push("C");//C是最后添加的
System.out.println(s.empty());//true
//查看堆栈的顶部对象,只是查看不进行任何操作
System.out.println(s.peek()); //C
//移除堆栈顶部的对象,并返回移除的这个对象
System.out.println(s.pop());//C
System.out.println(s); //[A, B]
//返回对象在堆栈中的位置,以1为基数,后进的为1,先进的往后排
System.out.println(s.search("B"));//
}
}
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表示了很多中数据结构的实现,每一种数据结构的操作名字不同
具体方法转载了一篇文章
第14章 集合框架(1)-List集合的各种类的更多相关文章
- Java集合框架概述和集合的遍历
第三阶段 JAVA常见对象的学习 集合框架概述和集合的遍历 (一) 集合框架的概述 (1) 集合的由来 如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一个非常简单的程序. 通常,程序 ...
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合
不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...
- 【集合框架】Java集合框架综述
一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...
- java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类
本文关键词: java集合框架 框架设计理念 容器 继承层级结构 继承图 集合框架中的抽象类 主要的实现类 实现类特性 集合框架分类 集合框架并发包 并发实现类 什么是容器? 由一个或多个确 ...
- -1-3 java集合框架基础 java集合体系结构 Collection 常用java集合框架 如何选择集合 迭代器 泛型 通配符概念 Properties 集合 迭代器
集合又称之为容器存储对象的一种方式 •数组虽然也可以存储对象,但长度是固定的:显然需要可变长度的容器 集合和数组的区别? A:长度区别 ...
- (1)StringBuilder类和StringBuffer类 (2)日期相关的类 (3)集合框架 (4)List集合
1.StringBuilder类和StringBuffer类(查手册会用即可)1.1 基本概念 由于String类描述的字符串内容无法更改,若程序中出现大量类似的字符串时需要申请独立的内存空间单独保存 ...
- 深入理解java集合框架之---------Linked集合 -----构造函数
linked构造函数 1.LinkedList(): 构造一个空列表的集合 /** * 序列化 */ private static final long serialVersionUID = 1090 ...
- 深入理解java集合框架之---------Arraylist集合 -----添加方法
Arraylist集合 -----添加方法 1.add(E e) 向集合中添加元素 /** * 检查数组容量是否够用 * @param minCapacity */ public void ensur ...
- 深入理解java集合框架之---------Arraylist集合 -----构造函数
ArrayList有三个构造方法 ArrayList有三个常量 1.private transient Object[] elementData (数组); 2.private int size (元 ...
随机推荐
- 背水一战 Windows 10 (36) - 控件(弹出类): ToolTip, Popup, PopupMenu
[源码下载] 背水一战 Windows 10 (36) - 控件(弹出类): ToolTip, Popup, PopupMenu 作者:webabcd 介绍背水一战 Windows 10 之 控件(弹 ...
- 使用T4模板合并js文件
不知道该怎么表达,或许直接贴图贴代码更好 前因:在第一个使用angularjs的项目中我将所有的controller写到一个文件里面,深知维护起来那滋味,所以再次使用angularjs的时候,我便把所 ...
- 转载:《TypeScript 中文入门教程》 10、混入
版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 介绍 除了传统的面向对象继承方式,还流行一种通过可重用组件创建类的方式,就是联合另一个 ...
- eclipse里打开SWT项目找不到source/design的图形UI设计界面
因为前天重新装了个新版的eclipse, 结果今天打开一个SWT的项目,突然找不到source/design的图形UI设计的两个切换按钮 我把SWT组件重新装了还是找不到.结果后来发现是因为重装ecl ...
- BZOJ 1044 木棍分割 解题报告(二分+DP)
来到机房刷了一道水(bian’tai)题.题目思想非常简单易懂(我的做法实际上参考了Evensgn 范学长,在此多谢范学长了) 题目摆上: 1044: [HAOI2008]木棍分割 Time Limi ...
- mybatis中的#和$的区别(转)
#相当于对数据 加上 双引号,$相当于直接显示数据 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sq ...
- 【圣诞呈献】高性能 Socket 组件 HP-Socket v3.1.1 正式发布
HP-Socket 是一套通用的高性能 Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP ...
- 装配bean
spring有三种装配bean的方式:隐式装配.java代码装配.xml装配 隐式装配最为省事方便,也称为自动化装配 这三种装配方式可以混搭着来用 在这里通过一个例子来讲述配置 CD的两个实现,一个是 ...
- C#中JSON序列化和反序列化
有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...
- jqGrid使用setColProp方法动态改变列属性
在使用jqGrid插件时,有时我们需要动态改变列的属性,可使用setColProp方法,用法如下 jQuery(”#grid_id”).setColProp('colname',{editoption ...