泛型
●泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后 调用此方法时传递实参。
● 参数化类型,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数, 此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具 体的类型(类型实参)。
publ ic class Demo {
private T p;
publ ic T getP() {
return p;
}
publ ic void setP(T p) {
this.p = p;
}
1、泛型的类型参数只能是类类型(包括自定义类
2、泛型的类型参数可以有多个。
如果没有定义具体类型,默认为Object
集合的概念
● 存储一个班学员信息,假定一个班容纳20名学员
学员1 | 学员6 | ||||
● 当我们需要保存一组一样(类型相同)的元素的时候,我们应该使用一个容器 来存储,数组就是这样一个容器。
● 数组有什么缺点?
● 数组一旦定义,长度将不能再变化。
● 然而在我们的开发实践中,经常需要保存一些变长的数据集合,于是,我们需 要一些能够动态增长长度的容器来保存我们的数据。
● 而我们需要对数据的保存的逻辑可能各种各样,于是就有了各种各样的数据结 构。Java中对于各种数据结构的实现,就是我们用到的集合。
集合API
集合体系概述
Java的集合框架是由很多接口、抽象类、具体类组成的,都位于java.util包中。
Collection接口
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4nIrx2ti-1623768078644)(C:\Users\何文强\AppData\Roaming\Typora\typora-user-images\1623321788158.png)]
1.boolean add(E)
这个一看就知道了,就是添加功能,往集合里面添加元素或者对象的方法,若是list这种,因为它返回都是true,一般情况下,可以随便往里面添加。
Collection s = new Collection();
s.add(你要添加的);
s.add("你要添加的");
2.void clear()
移除容器中的所有元素,该集合不支持移除的话就会抛出UnsupportedOperationException异常(不支持该操作)
//接着用上面的s集合
s.clear();
//这时候集合为空了
3.boolean contains(Object o)
用来检查此集合是否包含指定元素或者对象,包含则返回true不包含就返回false;会返回两种错误。
4.boolean isEmpty()
用来检查集合中是否为空,如果为空就返回true。
5.Iterator iterator()
返回一个Iterator迭代器,这个方法是用来遍历集合中的元素的,在一些需要获取集合中的元素(包括打印输出,调用等场景下),依赖于集合而存在的,有next方法和hasNext方法。
//其主要的用法如下,遍历的功能
//通过集合对象获取迭代器对象
Iterator i = 集合.iterator();
//hasNext方法是布尔型的返回值,有元素在集合里面的时候就会返回true
while(it.hasNext()){
System.out.println(it.next());
}
6.int size()
用来返回的集合的长度,也就是集合里面的元素的个数。
//直接使用,返回长度
集合.size();
7.Boolean remove()
用来删除集合中的元素,对象,只要有移除动作就会返回true。
8.BooleanretainAll();
求交集,集合数据发生变化返回true,不变返回false
List
List接口的特点:
- 有序的集合,存储元素和取出元素的顺序是一致的(存储123 取出123)
- 有索引,包含了一些带索引的方法
- 允许存储重复的元素
List接口中带索引的方法(特有):
public void add(int index,E element):将指定的元素,添加到该集合中的指定位置上。
public E get(int index):返回集合中指定位置的元素。
public E remove(int index):移除列表中指定位置的元素,返回的是被移除的元素。
public E set(int index,E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。
注意:
操作索引的时候,一定要防止索引越界异常
- IndexOutOfBoundsException:索引越界异常,集合会报
- ArrayIndexOutOfBoundsException:数组索引越界异常
- StringIndexOutOfBoundsException:字符串索引越界异常
//创建一个List集合对象,多态
List<String> list = new ArrayList<>();
{
//public void add(int index,E element):将指定的元素,添加到该集合中的指定位置上。
//在索引2和索引3之间添加一个cainiao
list.add(3,"cainiao");//{a,b,c,d}-->{a,b,c,cainiao,d}
//移除元素
String removeE = list.remove(2)
//替换元素
String setE = list.set(4,"A");
}
List的子类
- ArrayList集合
java.util.ArrayList集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。
- LinkedList集合
java.util.LinkedList集合数据存储的结构是链结构。方便元素添加,删除的集合。
java.util.LinkedList集合 implements List接口
ArrayList集合的特点:
- 底层是一个链的结构:查询慢,增删快
- 里边包含了大量操作首尾元素的方法
注意:
使用ArrayList集合特有的方法,不能使用多态
List接口常用方法:
1、add(Object element): 向列表的尾部添加指定的元素。
2、size(): 返回列表中的元素个数。
3、get(int index): 返回列表中指定位置的元素,index从0开始。
4、add(int index, Object element): 在列表的指定位置插入指定元素。
5、set(int i, Object element): 将索引i位置元素替换为元素element并返回被替换的元素。
6、clear(): 从列表中移除所有元素。
7、isEmpty(): 判断列表是否包含元素,不包含元素则返回 true,否则返回false。
8、contains(Object o): 如果列表包含指定的元素,则返回 true。
9、remove(int index): 移除列表中指定位置的元素,并返回被删元素。
10、remove(Object o): 移除集合中第一次出现的指定元素,移除成功返回true,否则返回false。
11、iterator(): 返回按适当顺序在列表的元素上进行迭代的迭代器。
ArrayList一样可以使用List的所有方法,所以以ArrayList来演示:
方法使用:
1、add(Object element) 向列表的尾部添加指定的元素。
2、size() 返回列表中的元素个数。
3、get(int index) 返回列表中指定位置的元素,index从0开始。
List接口集合迭代(集合续)
for循环遍历
通过索引值获取所对应的数据信息
注意:删除元素后 集合的长度发生变化 i一直向后增长
增强for循环的遍历
也是通过迭代器的方法获取信息
不允许遍历时,对元素进行操作
如果进行操作(删除) 会抛出异常
只允许操作一次,操作后必须 break结束循环 否则会抛出异常
迭代器遍历(Iterator)
通过集合返回迭代器。
```java
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList alist=new ArrayList();
alist.add("a");
alist.add("s");
alist.add("d");
alist.add("f");
alist.add("g");
/*
for 循环遍历
```
注意:删除元素后 集合的长度发生变化 i一直向后增长
*/
/*for (int i = 0; i <alist.size() ; i++) {
if (alist.get(i).equals("s")){
alist.remove(i);
}
}
System.out.println(alist);*/
/*
增强for循环 不允许遍历时,对元素进行操作
如果进行操作(删除) 会抛出异常
只允许操作一次,操作后必须 break结束循环 否则会抛出异常
*/
/*for (Object obj: alist) {
if (obj.equals("a")){
alist.remove(obj);
break;
}
}
System.out.println(alist);*/
/*
Iterator 集合迭代器
*/
Iterator iterator = alist.iterator();
//hasNext() 检测迭代器中是否含有元素
while (iterator.hasNext()){
Object obj =iterator.next();
if (obj.equals("a")){
iterator.remove();
break;
}
}
System.out.println(alist);
}
```
}