Java课程复习之集合框架

Java课程复习之集合框架

一、集合框架的概念

1.Java集合框架

  • 集合框架由一系列的集合类和接口所组成,主要存放在java.util包中
  • 集合类接口提供对集合元素的共性操作,如增删改查集合元素。
  • 集合类封装了底层常用的数据结构
  • Java集合框架类图
    在这里插入图片描述

二、集合类接口

1.Collection接口类型

  • Collection集合类的基本接口
  • 子接口主要包含List,Set,Queue
    • List规定实现该接口的集合类元素具有可以控制的顺序,但并没有定义或限制排序
    • Set不能包含重复的元素
    • Queue支持队列的插入、取出等操作,其子接口Deque支持两端的插入、取出操作。

三、常用集合类

1.常用集合类- ArrayList类(内部实现基于数组)

  • ArrayList < E > – 使用泛型
    Java泛型属于擦除型编译之后E类型被擦除,变为Object类型
  • 如果数组大小超过容量,则容量增加原容量的50%;

2.常用集合类- LinkedList类(内部实现基于链表)

  • 内部实现基于双向链表

3.常用集合类-ArrayDeque(提供栈结构实现)

  • 实现了Deque接口

4.常用集合类-HashSet(无重复元素的集合)

  • HashSet实现基于HashMap(哈希表)
  • 通过hashCodeequals方法确保集合元素的唯一性
    • 如果两个对象的equals的结果是相等的,则两个对象的hashCode的返回结果也是相同的
    • 任何适合覆写equals,都必须同时覆写hashCode

5.ArrayList和LinkedList比较

  • 共同点:
    都是List接口的实现类,用来存储一组可变的对象集合
  • 不同点:
    • ArrayList
      内部实现基于内部数组Object[ ];
      随机访问元素是,可以通过索引直接定位,效率较高
      插入、删除等操作需移动数组元素,效率较低
      元素大于数组容量,需要扩容
    • LinkedList
      内部实现基于一组链接的Node结点。
      随机访问元素时,必须从表头开始,效率较低
      插入、删除操作不需要移动Node结点,比ArrayList效率高
      按需为元素分配内存空间

6.Vector和ArrayList比较

  • 共同点:

    都是用来存储一组数量可变的对象集合,并可通过get方法随机地访问其中的元素

  • 不同点:

    • Vector
      方法是同步的(Synchronized),是线程安全
      当Vector的元素超过初始大小时,Vector的容量会翻倍
    • ArrayList
      ArrayList 的方法不是同步的,但性能很好(线程的同步会影响性能)
      当ArrayList 中的元素超过它的初始大小时,ArrayList只增加50%的大小

7.对集合遍历的接口

  • lterator接口
  • lterator操作描述
    hasNext()检索到有下一个对象返回ture,否则返回false。
    next()在hasNext方法为true时调用,返回一个Object类型的对象引用。若这个方法没有对象返回,则抛出一个NoSuchElementException异常。
    remove()在提供迭代器的集合对象中删除由next()方法指向的一个对象元素。若没有调用next(),或调用next()后连续两次调用remove(),则会抛出IllegaStateException异常。不是所有提供此迭代器的集合对象都支持这个方法,如果不支持情况下调用了该方法,则会抛出UnsupportedOperation异常。
  • ListIterator接口—不仅可以实现向后遍历,还可以实现向前遍历

8.集合对象排序接口Comparable(自身比较器)

  • Integer、String等类已经实现了Comparable接口
  • 抽象方法:compareTo(T o)
  • 用Collections类的静态方法排序 Collections.sort(al);

9.集合对象排序接口Comparator(自定义比较器)

  • 自定义集合元素比较器
  • public interface Comparator{int compare(Object o1,Object o2);}
  • 使用自定义比较器 :Collections.sort(al, new Compa());

10.Map接口类型

  • Map接口用于将一个键(Key)映射到一个值(Value),且不允许有重复的键,每个键最多映射到一个值
  • Map操作:
    Map操作描述
    Map改变允许用户改变当前Map的内容,包括关键字/值对的==插入/更新 V put(K key, V value);==删除 remove()
    Map查询允许用户从Map中获取关键字对应的值。V get(Object key)
    三种不同Map视图Set< K > keySet(); //返回Map类对象中的Key的Set视图Collection< V > values();//返回Map类对象中的所有value集合的 Collection视图Set<Map.Entry<K,V>> entrySet()//返回Map类对象中的Key-Value 对的Set视图

11.HashMap原理

  • HashMap内部实现基于哈希表,采用链表法解决哈希冲突
  • HashMap初始化和动态扩容(减少哈希冲突)
    默认容量为16,默认装载因子为0.75
    如果扩容,则扩容至原来哈希表大小的2倍
  • 当哈希表中链表过长时(大于等于8),链表会转换为红黑树,提高性能
  • HashMap是非线程安全的
  • 当使用自定义对象作为Key时,需同时覆写hashCode和equals方法,确保Key的唯一性

12.TreeMap原理

  • TreeMap内部实现基于红黑树(属于二叉查找树)。
  • TreeMap按照Key的排序结果来组织内部结构。
  • TreeMap依靠ComparableComparator实现Key的去重。

13.HashMap和TreeMap比较

  • 共同点:
    • 都可以实现多组key和value之间的映射
  • 不同点:
    • HashMap
      如果没有按照关键字顺序提取Map元素的需求,那么HashMap是更实用的结构。
    • TreeMap
      TreeMap在操作上需要比HashMap更多一些的开销,这是由于树的结构造成的,它返回排序的关键字。

四、集合类

1.Collections类

  • 该类通过一些静态方法,完成集合类的一些操作功能,例如Collections.sort(List l);
  • Collections和Collection是两个不同的概念,前者是类,后者是集合接口

2.集合类StringTokenizer

  • token为单元的字符串集合,它实现了Enumeration接口,对其集合进行遍历采用Enumeration提供的方法,也可采用它自己的方法。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值