集合框架——list、set集合

2 篇文章 0 订阅
2 篇文章 0 订阅

一、集合

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

二、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:底层用链表实现,查询效率比较低,增(插入)删效率较高
    线程不安全,运行效率较高。
    ) 集合的遍历:对集合中的元素进行一一访问。
    (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.<泛型标识>{
    // 在类中将 泛型标识作为一种数据类型
    }
    注意:通常会用 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)方法指定排序规则。—》外置比较器
  4. 子接口:Set -->Collection的子接口
    (1) 特点:存储任意类型的对象,无序、无下标、元素内容不可以重复。
    (2) 方法:继承于 父接口Collection中的方法。
    往集合中添加元素 add(Object o)
    (3) 实现类:HashSet
    如果自定义类型的对象往 HashSet中存储,为了保证元素内
    容不重复,需要做到以下两点:
    ① 覆盖 hashCode方法
    a. 必须保证内容相同的对象返回值相同的哈希码值,为了提高效率,尽可能做到内容不同的对象返回不同哈希码值
    b.覆盖原则:将所有的属性拼凑为int类型的结果作为返回值返回。
    ② 覆盖 equals方法:保证内容相同的对象返回true
    (4) Set集合其他的实现类:
    ① LinkedHashSet:是HashSet的子类,去除重复元素,同时可以按照元素添加顺序操作元素。如果自定类型的元素存储在LinkedHashSet中,为了保证元素内容不重复,存储元素对应类中需要覆盖 hashCode方法和 equals方法。
    ② TreeSet:是SortedSet接口的实现类,SortedSet是Set的子接口可以对集合中元素按照内容进行排序。
    注意:如果TreeSet集合中存储的是自定义类型的对象,则对象对应的类需要实现 java.lang.Comparable接口,同时实现 compareTo方法;TreeSet保证元素不重复,取决compareTo方法的返回值,返回值为0,代表内容相同的元素,直接拒绝添加到TreeSet集合中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值