Java集合框架

泛型

一、泛型的概念

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

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

语法:<T……> 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 <E> 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<E> 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<Map.Entry<K,V>> entrySet()返回此映射中包含的映射关系的Set视图
boolean equals(Object o)比较指定对象与本映射是否相等
V get(Object key)通过指定的键取得映射关系的值,键不存在则返回null
int hashCode()返回本映射的哈希码值
boolean isEmpty()判断本映射是否为空
Set<K> keySet()返回此映射中包含的键的Set视图
V put(K key,V value)添加新映射关系或修改映射关系
void putAll(Map<? extends K, ? extends V> m)将另一个映射中的所有映射关系都添加到本映射中
V remove(Object key)删除映射关系
int size()返回此映射中的映射关系数
Collection<V> 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(Collections<?>c1,Collections<?>c2) 如果两个指定collection中没有相同的元素,则返回true
    • addAll(Collection<?super T>c,T…a) 一种方便的方式,将所有指定元素添加到指定collection中
    • Comparator<T>reverseOrder(Comparatorcmp)返回一个比较器,它强行反转指定比较器的顺序。如果指定比较器为null,则此方法等同于reverseOrder()(返回一个比较器,它对实现 Comparable接口的对象集合施加了 自然排序的相反)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值