泛型

●泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后 调用此方法时传递实参。

● 参数化类型,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数, 此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具 体的类型(类型实参)。

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接口的特点:

  1. 有序的集合,存储元素和取出元素的顺序是一致的(存储123 取出123)
  2. 有索引,包含了一些带索引的方法
  3. 允许存储重复的元素

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集合的特点:

  1. 底层是一个链的结构:查询慢,增删快
  2. 里边包含了大量操作首尾元素的方法

注意:
使用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);
}
```

}