Java集合框架

文章目录

    • 泛型
      • 一、泛型的概念
      • 二、泛型集合
    • 集合
      • 一、集合的概念
      • 二、集合与数组的区别
      • 三、Collection体系集合
      • 四、Collection父接口
      • 五、List子接口
      • 六、Set子接口
    • 映射
      • 一、映射的概念
      • 二、Map父接口
    • Collections 工具类

泛型

一、泛型的概念

Java泛型是JDK1.5中引入的一个新特性,其本质是参数化类型,把类型作为参数传递

常见形式有泛型类、泛型接口、泛型方法

语法: T称为类型占位符,表示一种引用类型

好处:

  • 提高代码的重用性
  • 防止类型转换异常,提高代码安全性

二、泛型集合

泛型集合是参数化类型、类型安全的集合,强制集合元素的类型必须一致

特点:

  • 编译时即可检查,而非运行时抛出异常
  • 访问时不必类型转换(拆箱)
  • 不同泛型之间引用不能相互赋值,泛型不存在多态

集合

一、集合的概念

集合是对象的容器,实现了对对象常用的操作,类似数组的功能

二、集合与数组的区别

  1. 数组长度固定,集合长度不固定
  2. 数组可以存储基本类型和引用类型,集合只能存储引用类型

三、Collection体系集合

interface Collection(根接口,代表一组对象,称为“集合”)

  • interface List(特点:有序、有下标、元素可重复)
    • class ArrayList
    • class LinkedList
    • class Vector
  • interface Set(特点:无序、无下标、元素不能重复)
    • class HashSet
    • interface SortedSet
      • class TreeSet

四、Collection父接口

特点:代表一组任意类型的对象,无序、无下标、不能重复

主要方法:

方法名 描述
boolean add(Object obj) 添加一个对象
boolean addAll(Collection c) 将一个集合中的所有对象添加到此集合中
void clear() 清空此集合中的所有对象
boolean contains(Object o) 检查此集合中是否包含o对象
boolean equals(Object o) 比较此集合是否与指定对象相等
boolean isEmpty() 判断此集合是否为空
boolean remove(Object o) 在此集合中删除o对象
int size() 返回此集合中的元素个数
Object[] toArray() 将此集合转换成数组
boolean removeAll(Collection c) 删除此集合中所有属于c集合的元素,其余保留
boolean retainAll(Collection c) 删除此集合中所有不属于c集合的元素,其余保留
Iterator iterator() 返回此集合的迭代器对象

Iterator接口的方法:

方法名 描述
boolean hasNext() 返回迭代器是否有下一个对象,有则返回true,没有返回false
Object next() 返回迭代器所指的对象
void remove() 删除迭代器当前所指向的元素

**注意:**使用迭代器的过程中(while循环过程中),要删除元素的话必须使用迭代器的remove方法,不能使用集合的删除方法,否则会报错

五、List子接口

特点:有序、有下标、元素可重复

主要方法:

方法名 描述
void add(int index, Object o) 添加一个对象到index位置
boolean addAll(int index, Collection c) 将一个集合中的所有对象添加到此集合中的index位置
Object get(int index) 获取指定位置的元素
E set(int index, E element) 用指定元素替换列表中index位置的元素
List subList(int fromIndex, int toIndex) 返回一个从fromIndex位置到toIndex位置截取的子列表
int indexOf(Object o) 返回o对象在列表中的位置(从头开始)
int lastIndexOf(Object o) 返回o对象在列表中的位置(从尾开始)
Listiterator listIterator([int index]) 返回此列表的一个列表专有的迭代器对象,从index开始(可选)
E remove(int index) 删除index位置的元素并返回该元素

ListIterator接口的方法:

方法名 描述
void add(E e) 将指定元素插入列表
boolean hasNext() 返回迭代器是否有下一个对象,有则返回true,没有返回false
boolean hasPrevious() 返回迭代器是否有上一个对象,有则返回true,没有返回false
E next() 返回迭代器所指的下一个对象
int nextIndex() 返回next()元素的索引
E previous() 返回迭代器所指的上一个对象
int previousIndex() 返回对previous()元素的索引
void remove() 删除迭代器当前所指向的元素
void set(E e) 用指定元素替换next()或previous()返回的最后一个元素

List接口的实现类:

  • ArrayList(数组):
    特点:数组结构实现,查询快,增删慢
    JDK1.2引入,运行效率快,线程不安全
  • Vector(数组):
    特点:数组结构实现,查询快,增删慢
    JDK1.0就有,运行效率慢,线程安全
  • LinkedList(双向链表):
    特点:双向链表结构实现,增删快,查询慢

六、Set子接口

特点:无序、无下标、元素不可重复

主要方法:

方法名 描述
boolean add(Object obj) 添加一个对象
boolean addAll(Collection c) 将一个集合中的所有对象添加到此集合中
void clear() 清空此集合中的所有对象
boolean contains(Object o) 检查此集合中是否包含o对象
boolean containsAll(Collection c) 若此集合包含指定collection的所有元素,则返回true
boolean equals(Object o) 比较此集合是否与指定对象相等
boolean isEmpty() 判断此集合是否为空
boolean remove(Object o) 在此集合中删除o对象
int size() 返回此集合中的元素个数
Object[] toArray() 将此集合转换成数组
boolean removeAll(Collection c) 删除此集合中所有属于c集合的元素,其余保留
boolean retainAll(Collection c) 删除此集合中所有不属于c集合的元素,其余保留
int hashCode() 返回此集合的哈希码值

Set接口的实现类:

  • HashSet(哈希表+红黑树(jdk1.8)):
    基于HashCode实现元素不可重复

    当存入元素的哈希码值相同时,会调用equals进行确认,如果结果为true,则拒绝后者存入

  • TreeSet(红黑树):

    基于排列顺序实现元素不可重复

映射

一、映射的概念

存放k-v对的数据结构

特点:

  • 用于存储任意键值对(Key-Value)
  • 键:无序、无下标、不允许重复(唯一)
  • 值:无序、无下标、允许重复

二、Map父接口

特点:存储一对数据(key-value),无序、无下标,键不可重复,值可重复

常用方法:

方法名 描述
void clear() 清空所有键值对
boolean containsKey(Object key) 如果此映射包含指定的键的映射关系,则返回true
boolean containsValue(Object value) 如果此映射包含指定的值的映射关系,则返回true
Set> entrySet() 返回此映射中包含的映射关系的Set视图
boolean equals(Object o) 比较指定对象与本映射是否相等
V get(Object key) 通过指定的键取得映射关系的值,键不存在则返回null
int hashCode() 返回本映射的哈希码值
boolean isEmpty() 判断本映射是否为空
Set keySet() 返回此映射中包含的键的Set视图
V put(K key,V value) 添加新映射关系或修改映射关系
void putAll(Map m) 将另一个映射中的所有映射关系都添加到本映射中
V remove(Object key) 删除映射关系
int size() 返回此映射中的映射关系数
Collection values() 返回此映射中包含的值的Collection视图

Map接口的实现类:

  • HashMap(哈希表+红黑树):

    JDK 1.2版本,线程不安全,运行效率快,允许用null作为key或者value

  • HashTable(哈希表):

    JDK1.0版本,线程安全,运行效率慢,不允许用null作为key或value

  • Properties:
    HashTable的子类,要求key和value都是String,通常用于配置文件的读取

  • TreeMap(红黑树):
    实现了SortedMap接口(是Map的子接口),可以对key自动排序

Collections 工具类

Collections工具类
该工具类提供了大量针对Collection/Map的操作,总体可分为四类,都为静态(static)方法:

  1. 排序操作(主要针对List接口相关)

    • reverse(List list):反转指定List集合中元素的顺序
    • shuffle(List list):对List中的元素进行随机排序(洗牌)
    • sort(List list):对List里的元素根据自然升序排序
    • sort(List list,Comparator c):自定义比较器进行排序
    • swap(List list,int i,int j):将指定List集合中i 处元素和j 处元素进行交换
    • rotate(List list,int distance):将所有元素向右移位指定长度,如果distance等于size那么结果不变
  2. 查找和替换(主要针对Collection接口相关)

    • binarySearch(List list,Object key):使用二分法查找,以获得指定对象在List中的索引,前提是集合已经排序
    • max(Collection coll):返回最大元素
    • max(Collection coll,Comparator comp):根据自定义比较器,返回最大元素
    • min(Collection] coll):返回最小元素
    • min(Collection coll,Comparator comp):根据自定义比较器,返回最小元素
    • fill(List list,Object obj):使用指定对象填充
    • frequency(Collection Object obj):返回指定集合中指定对象出现的次数
    • replaceAll(List list,Object old,Object new):替换
  3. 同步控制
    Collections工具类提供了多个synchronizedXxx方法,该方法返回指定集合对象对应的同步对象,从而解决多线程并发访问集合时线程的安全问题。HashSet、ArrayList、HashMap都是线程不安全的,如果需要考虑同步,则使用这些方法。这些方法主要有:synchronizedSet、synchronizedSortedSet、synchronizedList、synchronizedMap、synchronizedSortedMap
    特别需要注意:在使用迭代方法遍历集合时需要手工同步返回的集合。(否则会有线程安全的问题)

  4. 设置不可变得结合

    • Collections工具类有三种方法返回一个不可变集合
    • emptyXxx(): 返回一个空的不可变的集合对象
    • singletonXxx(): 返回一个只包含指定对象的,不可变的集合对象
    • unmodifiableXxx(): 返回指定集合对象的不可变视图
  5. 其它

    • disjoint(Collectionsc1,Collectionsc2) 如果两个指定collection中没有相同的元素,则返回true
    • addAll(Collectionc,T…a) 一种方便的方式,将所有指定元素添加到指定collection中
    • ComparatorreverseOrder(Comparatorcmp)返回一个比较器,它强行反转指定比较器的顺序。如果指定比较器为null,则此方法等同于reverseOrder()(返回一个比较器,它对实现 Comparable接口的对象集合施加了 自然排序的相反)

你可能感兴趣的:(Java,java,集合)