Java基础04_集合框架
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础04_集合框架相关的知识,希望对你有一定的参考价值。
一、java中集合了类的关系图【简化版】
注:
虚线矩形表示接口
实线矩形表示具体实现类
实线矩形加粗表示具体实现类使用频率高,作为重点掌握
集合是存储多个元素的容器,但是,由于数据结构不同,java就提供了多种集合类。
而这多种集合类有共性的功能,所以,通过不断的向上抽取,最终形成了集合体系结构。
二、集合与数组的异同(面试题)
1.相同点
他们都是容器,都可以储存数据。
2.区别
长度区别
数组固定:数组对象创建时,长度就固定
集合可变:集合可以随着存储元素个数的变化,长度发生变化
数组即可以储存基本数据类型,也可以储存引用数据类型。
集合只能存储引用数据类型。
数组存储元素类型必须一致。
集合元素类型可以不一致。通过泛型可以限制集合的存储元素类型
三、单列集合继承体系
Collection(单列集合)
|—— List(元素存取有序,有索引,可以重复)
| |—— ArrayList
| | 底层是数组实现的,线程不安全,查找和修改快,增和删比较慢
| |—— LinkedList
| | 底层是链表实现的,线程不安全,增和删快,查找和修改比较慢
| |—— Vector
| | 底层是数组实现的,线程安全,无论增删改查都慢
| |—— 使用场景
| |—— 如果查找和修改多,用ArrayList
| |—— 如果增和删多,用LinkedList
| |—— 如果都多,用ArrayList
|
|—— Set(元素存取无序,无索引,不可以重复)
|—— HashSet
| | 底层是哈希算法实现
| |—— LinkedHashSet
| 底层是链表实现,保证元素存取顺序,但是也是可以保证元素唯一,和HashSet原理一样
|—— TreeSet
| 底层是二叉树算法实现
|—— 使用
一般在开发的时候不需要对存储的元素排序,大多用HashSet,HashSet的效率比较高
四、双列集合继承体系
Map(双列集合)
|—— HashMap
| | 底层是哈希算法,针对键有效
| |—— LinkedHashMap
| 底层是链表,针对键有效
|—— TreeMap
| 底层是二叉树算法,针对键有效
|—— 使用场景
开发中用HashMap比较多有效
五、继承体系学习方法
学习顶层:因为顶层定义的是共性内容。举例:水杯
使用底层:因为底层才是具体实现。举例:正方形水杯。椭圆形水杯
集合的常见使用步骤(四步走)
A:创建集合对象
B:创建元素对象
C:添加元素对象到集合对象中
D:遍历集合对象中的元素对象
1、通过集合对象获取迭代器对象。
2、通过迭代器对象的hasNext()方法判断是否有元素。
3、通过迭代器对象的next()方法获取元素并移动到下一个元素。
获取返回值为【Object对象】,需向下转型,使用子类对象的方法
六、java.util.Collection<E>接口.共性方法
1添加功能(掌握)
-
boolean add(Object obj):
向集合中添加一个元素。
向集合中添加传入集合的所有元素。
2删除功能(掌握)
-
void clear():
清空集合中所有的元素。
-
boolean remove(Object obj):
删除集合中第一次出现的指定元素对象。
删除集合中指定的集合元素。相当于去交集。
只要有【一个】元素被移除了,就返回true。
3判断功能(掌握)
-
boolean isEmpty():
判断集合是否为空。
-
boolean contains(Object obj):
判断集合是否包含指定的元素。
判断集合是否包含指定的集合中的【所有】元素。
对比记忆:
String的判断功能也有isEmpty()和contains()
4遍历功能(掌握)
Iterator iterator():获取迭代器。Collection类集合的专用遍历方式。
Iterator接口中的方法
-
boolean hasNext():
判断是否还有下一元素,有就返回true
-
Object next():
返回值为Object获取元素,并移动指针到下一个位置。
不要多次使用it.next()方法,因为每次使用都是访问下一个对象。
可能报出:NoSuchElementException 没有这样的元素异常。
当你已经获取到元素末尾了,你还要获取,已经没有元素了,所以报错。
-
void remove():
从迭代器指向的Collection中移除迭代到当前元素
每次调用 next() 只能调用一次此方法。
-
5长度功能(掌握)
int size():
获得集合的元素个数。
对比记忆:
数组:属性array.length
String和StringBuffer:方法length();
6交集功能(了解)
boolean retainAll(Collection c):
判断集合中是否有相同的元素。取交集的意思。
原集合改变,返回true
当对象集合是参数集合的子集,那么会返回false,因为原集合对象未发生改。
思考:
boolean retainAll(Collection c):
两个集合都有的元素?思考元素去哪了,返回的boolean又是什么意思呢?
//假设有两个集合A,B。
//A对B做交集,最终的结果保存在A中,B不变。
//返回值表示的是A是否发生过改变。
7转换功能(掌握)
Object[] toArray():
把集合变成数组。遍历集合的一种方式。
注意返回为Object数组,需要向下转型,举例:String s = (String) objs[x];
数组转成集合的方式:
java.util.Arrays;
public static <T> List<T> asList(T... a)返回一个受指定数组支持的固定长度大小的集合。
七、java.util.List<E>接口(特有方法与索引有关)
public interface List<E> extends Collection<E>
有序的 collection(也称为序列)。
此接口的用户可以对列表中每个元素的插入位置进行精确地控制。
用户可以根据元素的整数索引(在列表中的位置)访问元素,
并搜索列表中的元素。
与 set 不同,列表通常允许重复的元素。
1 List的特点
1. 有序(存储和取出的顺序一致)
2. 元素可以重复
3. 可以通过索引值操作对应位置的元素
2添加功能
-
void add(int index,Object obj):
在指定的索引位置增加插入指定的元素
注意:
Collection中的add方法返回值为boolean
IndexOutOfBoundsException -如果索引超出范围 (index < 0 || index > size())
ClassCastException - 如果指定元素的类不允许它添加到此列表
在指定的索引位增加一个集合的一堆元素
3删除功能
Object remove(int index):
删除指定索引位置的元素,返回被删除的元素
4修改功能
Object set(int index,Object obj):
将指定索引位置的元素替换为指定元素,返回原元素
5获取功能
-
Object get(int index):
获取指定索引位置的元素
特殊用法:
结合普通for循环和size()方法,可以遍历List集合或者其子类
-
int indexOf(Object obj):
获取指定元素第一次出现的索引位置
-
int lastIndexOf(Object o)
获取指定元素在集合中最后出现的索引
获取列表迭代器
可以遍历集合,在遍历的过程中,对集合元素做出修改和增删
6截取功能
List<E> subList(int fromIndex, int toIndex)
返回一个子集,从指定索引开始(包括),到指定索引结束(不包括)
7小结
List集合特有遍历方式
普通for循环+int size()方法+Object get(int index)方法+向下转型
可以遍历List集合及其子类,遍历过程中可以使用集合对象操作元素对象
总结
List接口的特有方法都与索引index有关
注意:方法的返回值为Object的居多
以上是关于Java基础04_集合框架的主要内容,如果未能解决你的问题,请参考以下文章