Java集合类

Java集合类关系图

这里写图片描述

集合类概述

  • 为什么出现集合类?

    面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。

  • 数组和集合类同是容器,有何不同?

    数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。

  • 集合类的特点

    集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。

Collection接口概述

  • Collection接口概述

    Collection 层次结构中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。

Collection接口成员方法

boolean add(E e)
boolean remove(Object o)
void clear()
boolean contains(Object o)
boolean isEmpty()
int size()
boolean addAll(Collection c)
boolean removeAll(Collection c)
boolean containsAll(Collection c)
boolean retainAll(Collection c)
Object[] toArray() 把集合转成数组,可以实现集合的遍历
Iterator iterator() 迭代器,集合的专用遍历方式

Iterator接口概述

  • Iterator接口概述

    对 collection 进行迭代的迭代器
    依赖于集合而存在

Iterator接口成员方法

boolean hasNext()
E next()

List接口概述

  • List接口概述

    有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
    与 set 不同,列表通常允许重复的元素。

List接口成员方法

void add(int index,E element)
E remove(int index)
E get(int index)
E set(int index,E element)
ListIterator listIterator()

ListIterator接口的成员方法

boolean hasPrevious()
E previous()

常见数据结构


队列
数组
链表

哈希表

ArrayList类概述及使用

  • ArrayList类概述

    底层数据结构是数组,查询快,增删慢
    线程不安全,效率高

Vector类概述及使用

  • Vector类概述

    底层数据结构是数组,查询快,增删慢
    线程安全,效率低

  • Vector类特有功能

        public void addElement(E obj)
        public E elementAt(int index)
        public Enumeration elements()

LinkedList类概述及使用

  • LinkedList类概述

    底层数据结构是链表,查询慢,增删快
    线程不安全,效率高

  • LinkedList类特有功能

        public void addFirst(E e)及addLast(E e)
        public E getFirst()及getLast()
        public E removeFirst()及public E removeLast()

泛型概述及使用

1:泛型是一种特殊的类型,它把指定类型的工作推迟到客户端代码声明并实例化类或方法的时候进行。
也被称为参数化类型,可以把类型当作参数一样传递过来,在传递过来之前我不明确,但是在使用的时候我就用明确了。
2:泛型的好处
A:提高了程序的安全性
B:将运行期遇到的问题转移到了编译期
C:省去了类型强转的麻烦

泛型由来

  • 为什么会有泛型呢?

    早期的Object类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题。也就存在这隐患,所以Java提供了泛型来解决这个安全问题。

泛型应用

  • 泛型类

    把泛型定义在类上
    格式:public class 类名<泛型类型1,…>
    注意:泛型类型必须是引用类型

  • 泛型方法

    把泛型定义在方法上
    格式:public <泛型类型> 返回类型 方法名(泛型类型 .)

  • 泛型接口

    把泛型定义在接口上
    格式:public interface 接口名<泛型类型1…>

泛型高级(通配符)

  • 泛型通配符<?>

    任意类型,如果没有明确,那么就是Object以及任意的Java类了

  • ? extends E

    向下限定,E及其子类

  • ? super E

    向上限定,E及其父类

class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}
public class CollectionDemo {
    public static void main(String[] args) {
        Collection<?> c1 = new ArrayList<Animal>();
        Collection<?> c2 = new ArrayList<Dog>();
        Collection<?> c3 = new ArrayList<Cat>();
        Collection<?> c4 = new ArrayList<Object>();

        Collection<? extends Animal> c5 = new ArrayList<Animal>();
        Collection<? extends Animal> c6 = new ArrayList<Dog>();
        Collection<? extends Animal> c7 = new ArrayList<Cat>();
        // Collection<? extends Animal> c8 = new ArrayList<Object>();

        Collection<? super Animal> c9 = new ArrayList<Animal>();
        // Collection<? super Animal> c10 = new ArrayList<Dog>();
        // Collection<? super Animal> c11 = new ArrayList<Cat>();
        Collection<? super Animal> c12 = new ArrayList<Object>();
    }
}

增强for概述及使用

  • 增强for概述

    简化数组和Collection集合的遍历

  • 格式:

    for(元素数据类型 变量 : 数组或者Collection集合) {
        使用变量即可,该变量就是元素
        }
  • 好处:简化遍历

  • 注意事项:增强for的目标要判断是否为null

静态导入概述及使用

  • 静态导入概述

    格式:import static 包名….类名.方法名;
    可以直接导入到方法的级别

  • 注意事项

    方法必须是静态的
    如果有多个同名的静态方法,容易不知道使用谁?这个时候要使用,必须加前缀。由此可见,意义不大,所以一般不用,但是要能看懂。

可变参数概述及使用

  • 可变参数概述

    定义方法的时候不知道该定义多少个参数

  • 格式

    修饰符 返回值类型 方法名(数据类型… 变量名){}
    注意:
    这里的变量其实是一个数组
    如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个

  • Arrays工具类中的一个方法

    public static <T> List<T> asList(T... a)

Set接口概述

  • Set接口概述

    一个不包含重复元素的 collection。

HashSet类概述

  • HashSet类概述

    不保证 set 的迭代顺序
    特别是它不保证该顺序恒久不变。

  • HashSet如何保证元素唯一性

    底层数据结构是哈希表(元素是链表的数组)
    哈希表依赖于哈希值存储
    添加功能底层依赖两个方法:
    1.int hashCode()
    2.boolean equals(Object obj)

LinkedHashSet类概述

  • LinkedHashSet类概述

    元素有序唯一
    由链表保证元素有序
    由哈希表保证元素唯一

TreeSet类概述

  • TreeSet类概述

    使用元素的自然顺序对元素进行排序
    或者根据创建 set 时提供的 Comparator 进行排序
    具体取决于使用的构造方法。

  • TreeSet是如何保证元素的排序和唯一性的

    底层数据结构是红黑树(红黑树是一种自平衡的二叉树)

Collection集合总结

  • Collection

    • List

      ArrayList
      Vector
      LinkedList

    • Set

      HashSet
      TreeSet

Map接口概述

  • Map接口概述

    将键映射到值的对象
    一个映射不能包含重复的键
    每个键最多只能映射到一个值

  • Map接口和Collection接口的不同

    Map是双列的,Collection是单列的
    Map的键唯一,Collection的子体系Set是唯一的
    Map集合的数据结构值针对键有效,跟值无关
    Collection集合的数据结构是针对元素有效

Map接口成员方法

V put(K key,V value)
V remove(Object key)
void clear()
boolean containsKey(Object key)
boolean containsValue(Object value)
boolean isEmpty()
int size()
V get(Object key)
Set<K> keySet()
Collection<V> values()
Set<Map.Entry<K,V>> entrySet()

Map集合遍历

  • 方式1:根据键找值

    获取所有键的集合
    遍历键的集合,获取到每一个键
    根据键找值

  • 方式2:根据键值对对象找键和值

    获取所有键值对对象的集合
    遍历键值对对象的集合,获取到每一个键值对对象
    根据键值对对象找键和值

HashMap类概述

  • HashMap类概述

    键是哈希表结构,可以保证键的唯一性

  • HashMap案例

    HashMap<String,String>
    HashMap<Integer,String>
    HashMap<String,Student>
    HashMap<Student,String>

LinkedHashMap类概述

Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。

TreeMap类概述

  • TreeMap类概述

    键是红黑树结构,可以保证键的排序和唯一性

  • TreeMap案例

    HashMap<String,String>
    HashMap<Student,String>

Collections类概述和成员方法

  • Collections类概述

    针对集合操作 的工具类

  • Collections成员方法

    public static <T> void sort(List<T> list)
    public static <T> int binarySearch(List<?> list,T key)
    public static <T> T max(Collection<?> coll)
    public static void reverse(List<?> list)
    public static void shuffle(List<?> list)

集合总结

  • Collection

    List
    Set

  • Map

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值