一、集合
- 集合:一种操作比较便利的对象容器,可以用于存储多个对
象(工具)。 - 位置:位于 java.util 包中
- 学习集合从以下 4点 内容进行学习:
(1) 集合接口特点
(2) 集合中的功能方法
(3) 集合的实现类
(4) 集合的遍历方式
二、Collection集合体系
1.根接口:Collection
(1)特点:用于存储任意类型的对象。
(2)常用的功能方法:
1. boolean add(Object obj):往集合中添加一个元素,添加成功-true;不成功-false。
2.void clear();清空集合元素
3. boolean contains(Object obj):判断当前集合中是否包含o元素,包含-true;不包含-false。
4. boolean isEmpty();判断集合是否为空,为空-true,不空-false。
5.boolean remove(Object obj):将指定o对象从当前集合中删除,删除成功-true;不成功-false。【javaSE引用】
6.int size();放回集合中元素的个数【开发重点】
(3) Collection具有多个子接口,没有直接的实现类,详见子
接口的实现类
(4) 遍历方式:详见 子接口
2.子接口:LIst,是Collection的子接口
(1)特点:存储任意类型的对象,有序、有下标、元素可以重复的。List集合下标的范围:0~size-1
(2)功能方法:继承与父接口Collection中的方法,同时定义了一些独有的方法:
① void add(int index,Object o):在当前集合中指定下标
位置插入元
素o。
② boolean addAll(int index,Collection c):在当前集合指
定位置,一
次 性插入多个元素
③ Object get(int index):返回 集合中指定下标的元素。
【重点】
④ Object remove(int index):返回集合中指定位置元素,被删除的元素作为返回值返回。
⑤ Object set(int index,Object o):用o替换集合指定位置的元素,被替换的元素作为返回值返回。
⑥ List subList(int from index , int toIndex):从当前集
合中截取指定
元素,从 fomIndex开始截取,截取到toIndex-1
(3)实现类:ArrayList[开发重点:ArrayList]
① ArrayList :底层用数组实现,查询效率较高,增(插 入)删效率较慢JDK1.2版本,线程不安全,执行效率较高。
注意:创建ArrayList对象时,底层数组并没有完成初始
化,长度为0,当第一次调用 add方法时,代表实际意义使用
ArrayList集合存储对象,底层数组才初始化,空间默认长度为 10,当存储对象达到数组上限,自动完成扩容,每一次扩容倍数为 1.5倍(如果出现小数区取整数位的长度)开发应用现象:项目应用集合时,居多操作为add(元素)方法,此方法采用的末尾添加方式,不会影响存储效率,删除数据,实际开发时,从数据库中删除数据。
② Vector:底层数组实现,查询效率较高,增(插入)删效率
较慢;JDK1.0版本,线程安全,效率较低。
③ LinkedList:底层用链表实现,查询效率比较低,增(插 入)删效率较高线程不安全,运行效率较高。
面试题目:写出 ArrayList、Vector、LinkedList的区别。
写出 ArrayList、Vector的区别。
写出 ArrayList、LinkedList的区别。
…
(4) 集合的遍历:对集合中的元素进行一一访问。
① 下标遍历:用循环变量控制集合下标
for(int i=0;i<集合名.size();i++){
// 通过下标获取每一个集合元素:
get Object o = list.get(i); // 通过 o 变量对集合元素进行操作 }
② forEach遍历 【开发应用重点】
for(数据类型 变量名:集合名){
// 直接通过变量名操作集合元素
}
注意:()中数据类型取决于集合中元素类型(泛型)
③ 迭代器(Iterator)遍历:是 forEach底层实现原理
1. 获取 迭代器对象
Iterator<集合元素数据类型> it = list.iterator();
注意:首次获迭代器会在所有元素的最左端产生一个指针(游标)
2. 常用的方法:
boolean hasNext():判断迭代中游标右侧还有没有数据, 有-true;没有结果为false。操作 hasNext()方法不会导致 游标的移动。
K next():获取迭代器中写一个元素。为了防止出现异
java.util.NoSuchElementException(没有 可取元素异 常),在调用next方法之前,需要利用 hashNext方法有没有可 取元素进行判断。
3. 迭代的遍历: Iterator<String> it= list.iterator(); while(it.hasNext()){
// 通过 it.next()方法获取迭代器中元素。 }
-
泛型
(1) 泛型集合:数据安全性的集合,强制要求集合中存储的数据类型统一 a. List<数据类型> list = new ArrayList<数据类型>(); List<数据类型> list = new ArrayList<>(); // 简单写法 b. 集合中存储的元素必须 是 <>中指定的数据类型
(2) 自定义的泛型类:
a. class 类名<泛型标识>{
// 在类中将 泛型标识作为一种数据类型
}
注意:通常会用 K/V/T/E等单个 大写字母作为泛型标识。
b. 泛型类中泛型标识具体的数据类型是根据对象创建时定:
类名<具体的数据类型> 引用名 = new 类名<具体的数据类型>();
注意:基本数据类型必须使用其包装类型作为泛型类型;
创建对象时,如果没有指定泛型具体的数据型,则默认为Object类型;
如果泛型类中有多个泛型标识,在创建对象时指定对应的数据类型时,jvm按照顺序进行匹配。指定时要么都指定,要么都不指定。
(3) JDK5.0版本及之后,泛型可以定义在接口,称为泛型接
口。
(4) 类设计时使用泛型,使程序更加的灵活和通用。
(5) 应用场景:设计通用类或是底层架构时,应用比较广泛。