Java-集合容器-2.List及其实现类
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
”);
二、ArrayList介绍
ArrayList就是传说中的动态数组,内部封装了 一个Object类型的数组 特点:
动态的增加和减少元素 灵活的设置数组的大小 与数组相比,性能稍差
ArrayList常用方法
新增方法
Void ensureCapacity(int minCapacity) 如有必要,增加此 ArrayList 实例的容量,以确保它 至少能够容纳最小容量参数所指定的元素数。 void trimToSize() 将此 ArrayList 实例的容量调整为列 表的当前大小。 void removeRange(int fromIndex, int toIndex) 移除列 表中索引在 fromIndex(包括)和 toIndex(不包括) 之间的所有元素。
补充:集合容器类
—List接口及其实现类
1
本章学习目标 重点、难点
学习目标
了解集合类的框架
理解各类接口之间的关系 掌握Set接口及相关类的使用 掌握List接口及相关类的使用
学习内容
掌握Map接口及相关类的使
用
集合容器的框架结构 相关接口和类之间的关系 Set接口及其实现类的使用 List接口及其实现类的使用 Map接口及其实现类的使用
List接口常用方法
设置元素
E set(int index, E element) 用指定元素替换列表中指 定位置的元素。
获取元素
E get(int index) 返回列表中指定位置的元素。 int indexOf(Object o) 返回此列表中第一次出现的指定 元素的索引,否则返回 -1 int lastIndexOf(Object o) 返回此列表中最后出现的指 定元素的索引,否则返回 -1。 List<E> subList(int fromIndex, int toIndex) 返回列表中 指定的 fromIndex(包括 )和 toIndex(不包括)之间的 部分视图。
重点
Set接口及HashSet和TreeSet的使用 LinkedList及ArrayList使用 HashMap、HashTable、TreeMap的使用 LinkedList及ArrayList使用 HashMap、HashTable的使用
Company Logo
难点
本次课学习内容及目标
了解List接口的相关方法 掌握List接口实现类的使用
ห้องสมุดไป่ตู้
List接口常用方法
添加元素
boolean add(E e) 向列表的尾部添加指定的元素 void add(int index, E element) 在列表的指定位置插 入指定元素 boolean addAll(Collection c) 添加指定 collection 中的 所有元素到此列表的结尾 boolean addAll(int index, Collection c) 将指定 collection 中的所有元素都插入到列表中的指定位置
获取元素
element() 获取但不移除此列表的头(第一个元素) Eget(int index) 返回此列表中指定位置处的元素 EgetFirst() 返回此列表的第一个元素 EgetLast() 返回此列表的最后一个元素
LinkedList常用方法
移除元素
E remove() 获取并移除此列表的头(第一个元素) E remove(int index) 移除此列表中指定位置处的元素 booleanremove(Object o) 从此列表中移除首次出现 的指定元素(如果存在) E removeFirst() 移除并返回此列表的第一个元素 removeLast() 移除并返回此列表的最后一个元素。
总结1
如果涉及到堆栈,队列等操作,考虑用List 需要快速插入,删除元素,应该使用 LinkedList 需要快速随机访问元素,应该使用ArrayList。 非同步的类,其效率较高,如果多个线程可能同 时操作一个类,应该使用同步的类。 尽量返回接口而非实际的类型,如返回List而非 ArrayList,这样如果以后需要将ArrayList换 成LinkedList时,客户端代码不用改变。这就 是针对抽象编程。
List示例
List list=new ArrayList(); //声明一个列表 list.add(new Integer(3)); //加入列表 list.add(new Integer(4)); list.add(new Integer(3)); list.add(new Integer(2)); for(int i=0;i<list.size();i++) System.out.println(list.get(i)+” ”);//get方法返回集合中的对象 3 4 3 2 Iterator it=list.iterator(); //使用迭代器获取元素 while(it.hasNext()) {System.out.println(it.next());} //为列表排序 Collections.sort(list); for(int i=0;i<list.size();i++) System.out.println(list.get(i)+”
课堂实践1—ArrayList使用
编写测试程序,测试ArrayList的各个方法,理解方法的 功能,掌握方法的使用。 通过测试程序,总结ArrayList的特点。
三、LinkedList介绍
实现List接口,基于双向循环链表结构
LinkedList常用方法
添加元素
voidaddFirst(E e) 将指定元素插入此列表的开头 voidaddLast(E e) 将指定元素添加到此列表的结尾
List接口常用方法
相关判断方法
boolean contains(Object o) 如果列表包含指定的元素 ,则返回 true boolean containsAll(Collection c) 如果列表包含指定 collection 的所有元素,则返回 true boolean equals(Object o) 比较指定的对象与列表是否 相等 boolean isEmpty() 如果列表不包含元素,则返回 true
LinkedList例子
LinkedList l=new LinkedList(); l.add("abc"); l.add("efg"); l.add("gogo"); l.add("error"); l.remove(3); //移除第四个元素 System.out.println(l.get(0)); //索引从0开始,得 到第一个元素 System.out.println(l.get(1)); //得到第二个元素 System.out.println(l.get(2)); // System.out.println(l.get(3));
四、辅助类—Collections
类java.util.Collections提供了一些静态方法 实现了基于List集合的一些常用算法
void sort(List l) //对List中的元素排序 void shuffle(List l) //对List中的元素进行随机排列 void reverse(List l) //对List中的元素进行逆序排列 void fill(List l,Object o) //用一个特定对象重写整个List void copy(List dest,List src) //将源内容拷贝到目的 int binarySearch(List l,Object o) //对顺序的List采用 折半查找的方法查找特定对象
List接口常用方法
移除元素
E remove(int index) 移除列表中指定位置的元素 boolean remove(Object o) 从此列表中移除第一次出 现的指定元素(如果存在) boolean removeAll(Collection c) 从列表中移除指定 collection 中包含的其所有元素 void clear() 从列表中移除所有元素
Stack类
Stack继承自Vector,实现一个后进先出的堆 栈。 Stack提供5个额外的方法使得Vector得以被当 作堆栈使用。 基本的push和pop方法,还有peek方法得到栈 顶的元素,empty方法测试堆栈是否为空, search方法检测一个元素在堆栈中的位置。 Stack刚创建后是空栈。
课堂实践2
创建一些商品类,如图书类、食品类、日用品类 等实体类。 创建业务类,构建容器对象,将这些商品放入容 器,并对容器中的商品对象进行增、删、改、查 操作。对容器中的数据每次操作后,都显示容器 中的元素,以作对比。 创建测试类,测试业务类的相关功能。
五、向量类Vector
Vector类以实现类似动态数组的功能 使用了synchronized方法(线程安全)所以性 能上比ArrayList要差
LinkedList ArrayList
了解Vector使用 了解Stack使用
3
一、List接口
Collection接口的子接口,继承了其方法
其元素以线性方式存储。
特点:
元素可重复 元素有序 可以对元素的位置精确控制
实现类
ArrayList LinkedList Vector Stack
ArrayList和LinkedList比较
ArrayList基于数组,LinkedList基于链表 随机访问元素,ArrayList优于LinkedList 增加和删除元素,LinkedList优于ArrayList 可用LinkedList实现栈、队列结构 结论:
若是随机获取元素值,则用ArrayList 若是频繁添加和删除元素,则用LinkedList
向量类提供了三种构造方法:
public vector() public vector(int initialcapacity,int capacityIncrement) public vector(int initialcapacity)
Vector例子
import java.util.*; class VectorTest { public static void main(String args[]) { Vector vec=new Vector(); Date date=new Date(); vec.add(new Integer(1)); vec.add(new Float(3.45f)); vec.add(new Double(1.2)); vec.add(date); System.out.println("Size:"+vec.size()); Integer n1=(Integer)vec.get(0); System.out.println("向量第1个元素:"+n1.intValue()); Float n2=(Float)vec.get(1); System.out.println("向量第2个元素:"+n2.floatValue()); Double n3=(Double)vec.get(2); System.out.println("向量第3个元素: "+n3.doubleValue()); Date n4=(Date)vec.lastElement(); System.out.println("向量第4个元素:"+n4.toString()); if (vec.contains(date)) System.out.println("存在date"); }}