《使用java高级实用技术》由会员分享,可在线阅读,更多相关《使用java高级实用技术(114页珍藏版)》请在金锄头文库上搜索。
1、额外收获1冒泡排序口诀:两两相比小靠前外出循环n-1内层循环n-1-i集合框架和泛型1.1 集合概述数组存储多个同类型数据的缺陷: (1)数组长度固定不变,不能很好适应元素数量动态变化的情况。(2)可通过数组名.length获取数组的长度,却无法直接获取数组中实际存储的元素个数。(3)数组采用在内存中分配连续空间的存储方式,根据元素信息查找时效率低,需要多次比较。Java集合框架图Java的集合类主要有Map接口和Collection接口派生而来。类或接口描述Collection可以存储一组不唯一、无序的对象List可以存储一组不唯一、有序的对象ArrayList可以存储一组不唯一同一数据类型
2、、有序的对象。在内存中分配连续的空间,插入、删除等操作频繁时性能低下。LinkedList可以存储一组不唯一、有序的对象。插入、删除元素时效率比较高,但是查找效率很低。Set可以存储一组唯一、无序的对象HashSet可以存储一组唯一、无序的对象。HashSet类是非线程安全的。Iterator专门实现集合的遍历Map存储一组成对的键(key)-值(value)对象HashMap查询指定元素效率高1.2 List接口Collection接口是最基本的集合接口,可以存储一组不唯一、无序的对象。List接口继承自Collection接口,是有序集合。List可以存储一组不唯一、有序的对象。List接
3、口重用的实现类有Array List和LinkedList。1.2.1 使用ArrayList类动态存储数据ArrayList集合类和数组采用相同的存储方式,在内存中分配连续的空间,但是它不同与数组,ArrayList集合中可以添加任何类型的数据,并且添加的数据都将转换成Object类型,而在数组中只能添加同一数据类型的数据。例: ArrayList list = new ArrayList();Student stu=new Student();list.add(null);list.add(stu);ArrayList类的常用方法方法说明boolean add(Object e)在列表的末
4、尾顺序添加元素,其实索引位置从0开始void add(int index, Object o)在指定的索引位置添加元素,索引位置必须介于0和列表中元素个数之间int size()返回列表中元素的个数Object get(int index)返回指定索引位置处的元素,取出的元素是Object类型,使用前需要进行强制类型转换void set(int index, Object obj)将index索引位置的元素替换为obj元素boolean contains(Object o)判断列表中是否存在指定元素int indexOf(Object obj)返回元素在集合中(首次)出现的索引boolean
5、remove(Object o)从列表中删除元素Object remove(int index)从列表中删除指定位置元素,起始索引位置从0开始ArrayList list = new ArrayList(); /创建ArrayList对象/添加数据list.add(张三丰);list.add(郭靖);list.add(杨过);/判断集合中是否包含“李莫愁”boolean flag=list.contains(李莫愁);if(flag)System.out.println(李莫愁在集合中存在!);elseSystem.out.println(李莫愁在集合中不存在!);/把索引为0的数据移除Sys
6、tem.out.println(移除前索引为0的数据是:+(String)list.get(0);list.remove(0);System.out.println(移除后索引为0的数据是:+(String)list.get(0);/把索引为1的元素替换为其他元素System.out.println(替换前索引为1的数据是:+(String)list.get(1);list.set(1, 黄蓉);System.out.println(替换后索引为1的数据是:+(String)list.get(1);/遍历集合,输出集合中的元素System.out.println(集合中的元素:);for(in
7、t i=0;ilist.size();i+)String name=(String)list.get(i);System.out.println(name);/输出某个元素所在的索引位置,若集合中没有该元素,输出结果为-1System.out.println(小龙女在集合中的索引位置:+list.indexOf(小龙女);System.out.println(黄蓉在集合中的索引位置:+list.indexOf(黄蓉);/清空集合list中的数据list.clear();/判断集合中是否包含数据for(Object obj:list)String name=(String)obj;System.
8、out.println(name);if(list.isEmpty()System.out.println(集合list中不包含数据!);elseSystem.out.println(集合list中包含数据!);输出结果:李莫愁在集合中不存在!移除前索引为0的数据是:张三丰移除后索引为0的数据是:郭靖替换前索引为1的数据是:杨过替换后索引为1的数据是:黄蓉集合中的元素:郭靖黄蓉小龙女在集合中的索引位置:-1黄蓉在集合中的索引位置:1集合list中不包含数据!ArrayList因为可以使用索引来直接获取元素,所以其优点是遍历元素和随机访问元素的效率比较高。但是由于ArrayList采用了和数组相
9、同的存储方式,在内存中分配连续的空间,在添加和删除非尾部元素时会导致后面所有元素的移动,这就造成ArrayList对插入、删除等操作频繁时性能低下。所以数据操作(指插入、删除)频繁时,最好使用LinkedList存储数据。1.2.2 使用LinkedList类动态存储数据LinkedList类是List接口的链接列表实现。它支持实现所有List接口可选的列表的操作,并且允许元素值是任何数据,包括null。LinkedList采用链表存储方式,优点在于插入、删除元素时效率比较高,但是LinkedList的查找效率很低。它除了包括ArrayList类所包含的方法外,还提供了其特有的一些方法:方法说
10、明void addFirst(Object obj)将给定元素插入当前集合首部void addLast(Object obj)将给定元素插入当前集合尾部Object getFirst()获得当前集合的第一个元素Object getLast()获得当前集合的最后一个元素Object removeFirst()移除并返回当前集合的第一个元素Object removeLast()移除并返回当前集合的最后一个元素注意点: List list = new LinkedList();LinkedList ll = new LinkedList();list.addFirst(s);/此时,会发生编译错误l
11、l.addFirst(s);1.3 Set接口1.3.1 Set接口概述Set接口描述的是一种比较简单的集合,集合中的对象并不按特定的方式排序,并且不能保存重复的对象,也就是说Set接口可以存储一组唯一、无序的对象。Set接口的实现类有HashSet。1.3.2 使用HashSet类动态存储数据假如现在需要在很多数据中查找某个数据,如果使用ArrayList,在不知道数据的索引,且需要全部遍历的情况下,效率一样很低下。为此Java集合框架提供了一个查找效率高的集合类HashSet。HashSet集合的特点如下:(1)集合内的元素是无序排列的。(2)HashSet类是非线程安全的。(3)允许集合
12、元素值为null。HashSet类的常用方法:方法说明boolean add(Object o)如果此Set中尚未包含指定元素,则添加指定元素void clear()从此Set中移除所有元素int size()返回此Set中的元素的数量(Set的容量)boolean isEmpty()如果此Set不包含任何元素,则返回trueboolean remove(Object o)如果指定元素存在与此Set中,则将其移除HashSet类不存在get()方法,所以Set接口无法使用普通for循环遍历。1.4 Iterator接口1.4.1 Iterator接口概述Iterator接口表示对集合进行迭代的
13、迭代器。此接口主要有两个方法:(1)hasNext():判断是否存在下一个可访问的元素,如果仍有元素可以迭代,则返回true。(2)next():返回要访问的下一个元素。凡是有Collection接口派生而来的接口或者类,都实现了iterate()方法,此方法返回一个Iterator对象。1.4.2 使用Iterator遍历集合示例:ArrayList list = new ArrayList();list.add(张三);list.add(李四);list.add(王五);list.add(2,杰伦);System.out.println(使用Iterator遍历,分别是:);Iterator it = list.iterator(