集合---List

集合

一、集合

  1. 集合:一种操作比较便利的对象容器,可以用于存储多个对象(工具)。

  2. 位置:位于 java.util 包中

  3. 学习集合从以下4点内容进行学习:
    (1) 集合接口特点
    (2) 集合中的功能方法
    (3) 集合的实现类
    (4) 集合的遍历方式

二、Collection 集合体系

  1. 根接口:Collection
    (1) 特点:用于存储任意类型的对象。
    (2) 常用的功能方法
    ① boolean add(Object obj):往集合中添加一个元素, 添加成功 true;不成功-false。【开发重点】
    ② void clear():清空集合元素
    ③ boolean contains(Object o):判断当前集合中是否包含o元素,包含-true;不包含-false
    ④ boolean isEmpty():判断集合是否为空,为空-true; 不为空-false
    ⑤ boolean remove(Object o):将指定o对象从当前集合中删除,删除成功-true;不成功-false。【JavaSE引用】
    ⑥ 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 :底层用数组实现,查询效率较高,增(插入)删效率较慢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. 泛型
    (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) 应用场景:设计通用类或是底层架构时,应用比较广泛。

  2. Collections工具类
    (1) 位于java.util包中对集合元素进行操作的工具类
    (2) 功能方法:
    a. static void reverse(List list):将集合中元素进行倒置
    b. static void shuffle(List list):对集合中元素进行随机显 示
    c. static void sort(List list):对集合元素进行排序。
    注意:如果参与排序的集合中存储的是自定义类型的对象,则对象对应类需要实现 java.lang.Comparable接口,同 时实现接口中 compareTo方法指定排序规则。

  3. 面试题目:利用Java中的现有方法实现对集合元素进行排序。
    (1) Collections.sort(集合名); 如果参与排序的集合中存储的是自定义类型的对象,则对象对应类需要实现 java.lang.Comparable接口,同时实现接口中 compareTo(T t)方法指定排序规则。—内置比较器
    (2) List接口中提供默认方法 sort(Comparator c):如果参与排序的集合存储的是自定义类型的对象,则需要在参与比较的对象以外的地方定义一个匿名内部类(或是Lambda表达式) 实现 java.util.Comparator接口,同时实现 compare(T t1,T t2)方法指定排序规则。—外置比较器

你可能感兴趣的:(笔记)