集合

一、集合

  1. 集合:一种操作比较便利的对象容器,可以用于存储多个对
    象(工具)。
  2. 位置:位于 java.util 包中
  3. 学习集合从以下 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. 泛型

     (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) 应用场景:设计通用类或是底层架构时,应用比较广泛。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值