集合

来源:互联网 发布:js判断是否等于0 编辑:程序博客网 时间:2024/06/06 15:46

 

1. 集合

1.1. 数组特性

数组访问速度快但创建之后容量无法改变。

如何解决数组长度增加问题?

可以等到容量快不够用的时候创建一个新数组,把旧数组的数据复制到新数组,ArrayList就是这么做的。

ArrayList比数组灵活,但效率更低。

问题:存储一个班的学员信息,假定一个班容纳20名学员。 加一个学生?Student[] stuArr = new Student[20];

如何存储每天的新闻信息?(每天的新闻总数不确定,太少,空间不足,太多,浪费空间。)

1.2. 数组和集合的区别

数组的大小是固定的,同一个数组只能存放类型一样的数据。

集合的大小可长可短 ,如果不知道要存放多少数据,需要使用集合,不能用数组。

JAVA保存一组数据,速度最快的方式是数组最灵活的是集合。

1.3. 什么是集合?

Java集合工具包位置是java.util.*,包含了集合、链表、队列、栈、数组、映射等。

1.4. Java集合主要可以划分为4个部分

 

 

画虚线的:接口

画实线的:类

 

l Collection 接口存储一组不唯一,无序的对象。

l List接口存储一组不唯一,有序,可重复的对象。

l Set接口存储唯一,无序的对象。

l Map接口存储一组对象,提供Key—Value的映射。

l 工具类(Iterator迭代器、Enumeration枚举类、ArraysCollections)

Iterator衣特瑞特 、Enumeration以牛么瑞沈

1.5. 集合的体系结构

l 集合主要包含两大接口CollectionMap

l ListSet继承自Collection接口。Map也属于集合系统,但和Collection接口不同。

l Set无序、元素唯一 。HashSetTreeSet是主要的实现类。

l List有序、元素可重复。ArrayListLinkedListVector(淘汰)是主要的实现类。

l Map是键值对集合,根据一个对象查找对象。其中key列就是一个集合,key不能重复,但是value可以重复。HashMapTreeMapHashtableMap的主要实现类。

1.6. ArrayList

什么ArrayList?

ArrayList是一个数组队列,相当于动态数组。与数组相比,ArrayList的容量能动态增长。

ArrayList包含什么功能?

l 添加、删除、修改、遍历一组数据。

l ArrayList 实现了Cloneable接口,覆盖了函数clone(),能被克隆。

l ArrayList 实现java.io.Serializable接口,支持序列化,能通过序列化传输。

l ArrayList中的操作不是线程安全的,所以,在单线程中才使用ArrayList,在多线程中可以选择Vector

ArrayList 基本用法

 

ArrayList3种遍历方式

结论遍历ArrayList时,使用索引序号访问效率最高,使用迭代器的效率最低

ArrayList和数组互相转换

ArrayList总结

l ArrayList 实际上是通过一个数组去保存数据的。当我们构造ArrayList时;若使用默认构造函数,则ArrayList的默认容量大小是10

l 当ArrayList容量不足以容纳全部元素时,ArrayList会重新设置容量:新的容量=“(原始容量x3)/2 + 1”

l ArrayList的克隆函数,即是将全部元素克隆到一个数组中。

ArrayList的使用场景:

    (1)长度不确定

    (2)经常访问

    (3)插入和删除不频繁

    (4)当数据量不大的时候基本都可以使用ArrayList

ArrayList<String>如何使用

练习

新建Book类,属性自拟。创建一个ArrayList里面放3书。遍历输出。

l 新建商品类,属性自拟。创建一个ArrayList里面放3商品,遍历输出。

1.7. LinkedList

AbstractSequentialList 实现了get(int index)set(int index, E element)add(int index, E element) remove(int index)这些方法,ArrayListLinkedList都继承了AbstractSequentialList

ArrayListLinkedList的区别

(1ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

(2)插入删除元素LinkedLisst效率高,只需要改变指针地址,ArrayList效率低,要移动数据。

(3)随机访问元素LinkedLisst效率低,要从第一个开始查找,ArrayList效率高。

ArrayListLinkedList增删改查比较

数据插入 :比如在i节点插入一个新数据

ArrayList:循环到i节点,插入一个新数据,然后把i节点后面的所有的数据的index1 ->操作多

LinkedList:循环到i节点,把前一个节点的后续链接到新数据,然后把新数据链接到后一个数据就可以了  ->操作少

结论:平均效率LinkedList要好

数据删除 :比如删除i节点数据

ArrayList:循环到i节点,然后把i节点后面的所有的数据的index1 ->操作多

LinkedList:循环到i节点,把前一个节点的后续链接到i节点的后一个数据就可以了  ->操作少

结论:平均效率LinkedList要好

数据查询 :比如查询i节点数据

ArrayList:循环到i节点->操作少

LinkedList:循环到i节点  ->操作少,但由于每个数据的地址不一样,查询比ArrayList

结论:平均效率 ArrayList要好

数据更新 :比如更新i节点数据

ArrayList:循环到i节点,把数据更新->操作少

LinkedList:循环到i节点,把前数据更新  ->操作少,但由于查询速度没有ArrayList,所有效率没有ArrayList

结论:平均效率ArrayList要好

这样我们就可以看到各有优点

LinkedList的使用:

(1)LinkedList中的大部分方法的使用和ArrayList一样

(2)LinkedList中部分特殊的方法

    

使用代码比较ArrayListLinkedList效率

练习: 使用LinkedList集合存储新闻标题(包含ID,名称,创建者),实现获取,添加,及删除头条和末条新闻标题信息,并遍历集合。

总结

如果查询操作较多ArrayList的效果更好

如果删除插入较多LinkedList的效果较好

1.8. HashSet

什么HashSet?

HashSet 是一个没有重复元素的集合。不保证元素的顺序,而且HashSet允许使用null 元素。

理解HashSet的不同

练习:使用HashSet类常用方法存储并操作新闻标题信息,并遍历集合

1.9. 作业

l ArrayList必须精通

把用户管理系统、图书管理系统、商品管理系统的所有数组替换为ArrayList

 

 

 

 

 

   

原创粉丝点击