java集合类

集合类

1, 概述

1.1 Java提供了哪些集合类

1, 简单介绍集合类体系, 哪些集合类特点

2, 重点说ArrayList, HashMap

集合类的特点分析: 回答的顺序

  1. 这个集合类是谁的子类,
  2. 描述了什么数据结构
  3. 底层结构是什么
  4. (如果底层结构是数组) --> 默认的初始容量, 扩容机制问题
  5. 存储元素有序与否
  6. 能否存储重复元素
  7. 能不能存储null元素
  8. 线程是否安全

2, Collection

2.1Collection的特点:

1, Collection是Collection集合体系的顶级接口

2, 它是作为一个数据容器而存在的( 意味着应该具有添加/删除/查找 等方法)

3, 不提供此接口的任何直接 实现:它提供更具体的子接口

一些 collection 允许有重复的元素,而另一些则不允许。

一些 collection 是有序的,而另一些则是无序的。

2.2Collection的方法api

boolean add(E e)
确保此 collection 包含指定的元素(可选操作)。
boolean addAll(Collection<? extends E> c)
将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。
boolean remove(Object o)
从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
boolean removeAll(Collection<?> c)
移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
boolean contains(Object o)
如果此 collection 包含指定的元素,则返回 true。
boolean containsAll(Collection<?> c)
如果此 collection 包含指定 collection 中的所有元素,则返回 true。

boolean retainAll(Collection<?> c)
仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。

void clear()
移除此 collection 中的所有元素(可选操作)。
int size()
返回此 collection 中的元素数
boolean isEmpty()
如果此 collection 不包含元素,则返回 true。

boolean equals(Object o)
比较此 collection 与指定对象是否相等。
int hashCode()
返回此 collection 的哈希码值。

Object[] toArray()
返回包含此 collection 中所有元素的数组。
T[] toArray(T[] a)
返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。

Iterator iterator()
返回在此 collection 的元素上进行迭代的迭代器。

// foreach循环, 增强/加强 for循环

// for(遍历出的单个数据 :   要遍历的数据){}
for (Object o : collection) {
    collection.remove("zs");// 导致并发修改异常
    System.out.println(o);
}

//注意foreach循环 java编译之后, 就变成Iterator迭代了
//    ---> 1, foreach循环遍历的东西, 应该具有iterator方法
//    ---> 2, 在foreach循环体内, 调用原集合类的修改结构的方法, 会修改异常产生

3, List

3.1 List的特点

1, List是Collection的一个子接口

2, List描述的数据结构是一个线性表

3, List的子实现都是有序的 --> 有下标概念 --> List在Collection的基础上, 定义了很多根据下标操作的api

4, List 允许存储重复元素

5, List允许存储null

3.2 List 的api

boolean add(E e)
boolean addAll(Collection<? extends E> c)
boolean contains(Object o)
boolean containsAll(Collection<?> c)
boolean remove(Object o)
boolean removeAll(Collection<?> c)
boolean retainAll(Collection<?> c)

void add(int index, E element) // 根据下标位置添加
boolean addAll(int index, Collection<? extends E> c) // 根据下标位置添加所有
E get(int index) // 根据下标获取对应内容
int indexOf(Object o) // 查找一个内容的下标
int lastIndexOf(Object o) // 查找一个内容的下标(最后一次出现的位置)
E remove(int index) // 根据下标删除指定内容
E set(int index, E element) // 根据下标修改对应位置

void clear()
boolean equals(Object o)
int hashCode()
boolean isEmpty()
int size()

Object[] toArray()
T[] toArray(T[] a)
Iterator iterator()

ListIterator listIterator()
ListIterator listIterator(int index)

List subList(int fromIndex, int toIndex) // 切割方法, 根据下标切割 : 视图方法

// 视图方法: 方法返回的对象并没有真正的切割/复制/创建新的数据, 仅是维护一些标记, 依赖于原数据

在subList的标签, 看上去好像subList切割出一个新的对象, 复制了一份新的数据, 实际上并没有, 它的设计思路, 仅是创建一个对象, 维护一些标记, 这些标记用来标记源数据对应的位置, 意味着subList切割出的数据, 依赖于源数据存在

// 视图 --> 数据库

// 在数据库里面 口语化称为 “虚表”

4, Vector

// 1, Vector, stack版本是jdk1.0, 不太常用(为什么不太常用: 颗粒度太细)

// 2, stack 作为 vector一个子类, 是想复用父类的结构/参数/方法

// 3, 如果我们真正需要使用栈这种数据结构, 推荐用LinkedList或者ArrayDeque, 而不是用Stack

5, ArrayList

5.1 ArrayList的特点

1, ArrayList是List接口 的一个直接实现

2, ArrayList代表的数据结构是线性表

3, ArrayList底层结构是数组

4, ArrayList底层数组的初始容量10, 扩容机制 1.5旧长度

6, ArrayList存储元素有序

7, ArrayList允许存储重复元素

8, ArrayList允许存储null

9, ArrayList线程不安全

5.2 构造方法

ArrayList() 
          构造一个初始容量为 10 的空列表。 
ArrayList(Collection<? extends E> c) 
          构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。 
ArrayList(int initialCapacity) 
          构造一个具有指定初始容量的空列表。 

5.3 ArrayList 的 api

boolean add(E e) 
          将指定的元素添加到此列表的尾部。 
 void add(int index, E element) 
          将指定的元素插入此列表中的指定位置。 
 boolean addAll(Collection<? extends E> c) 
          按照指定 collection 的迭代器所返回的元素顺序,将该 collection 中的所有元素添加到此列表的尾部。 
 boolean addAll(int index, Collection<? extends E> c) 
          从指定的位置开始,将指定 collection 中的所有元素插入到此列表中。 
 void clear() 
          移除此列表中的所有元素。 
 boolean contains(Object o) 
          如果此列表中包含指定的元素,则返回 true。 
。 
 E get(int index) 
          返回此列表中指定位置上的元素。 
 int indexOf(Object o) 
          返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1boolean isEmpty() 
          如果此列表中没有元素,则返回 true 
 int lastIndexOf(Object o) 
          返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1E remove(int index) 
          移除此列表中指定位置上的元素。 
 boolean remove(Object o) 
          移除此列表中首次出现的指定元素(如果存在)。 
 E set(int index, E element) 
          用指定的元素替代此列表中指定位置上的元素。 
 int size() 
          返回此列表中的元素数。 
 Object[] toArray() 
          按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组。 
<T> T[] 
 toArray(T[] a) 
          按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。 
    
    
 void trimToSize() 
          将此 ArrayList 实例的容量调整为列表的当前大小。 
 Object clone() 
          返回此 ArrayList 实例的浅表副本。 
void ensureCapacity(int minCapacity) 
          如有必要,增加此 ArrayList 实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数

    
    
iterator
subList 

6, Queue

注意: queue它的子实现不允许存储null元素 (linkedList允许存储null)

6.1 BlockingQueue: 阻塞队列

首先是一个队列(限定大小)

存储满, 添加动作等待

存储空, 删除动作等待

注意: BlockingQueue队列中, 不仅仅有阻塞的put, take方法, 依旧有原本的非阻塞的(add remove offer… 不推荐使用)

7, Deque

Deque不仅仅只是一个队列, 他在Queue的基础上, 进行了定义的增强, 可以作为双端队列, 和 栈使用

8, LinkedList

由于LinkedList不仅仅实现了List 还是Deque的子实现 --> LinkedList可以作为线性表/队列/双端队列/栈使用

LinkedList底层是双向链表

9, ArrayDeque

ArrayDeque: 底层是一个循环数组 : 长度永远是2的幂值

取模运算是通过位运算计算的

10, Set

11, Map

Map存储的是key-value数据(键值对),

key-value数据: 具有自我描述性

11.1Map的特点

Map存储的是key-value数据, 我们研究的重点一直在key上

1, Map是Map集合体系的顶级接口

2, Map存储键值对数据

3, Map的一些子实现是有序的(指key)(TreeMapkey大小有序, LinkedHashMap添加有序), 另一些子实现是无序的(HashMap)

4, Map的子实现都允许存储重复的key: (key的重复的定义不一样)(TreeMap重复的定义key的大小重复)

6,Map的一些子实现允许存储key为null(Hashmap, LinkedhashMap), 另一些子实现不允许存储key为null (TreeMap)

11.2 Map的api

 V put(K key, V value) : 添加一份key-value数据 
 void putAll(Map<? extends K,? extends V> m) 
 V remove(Object key) : 根据key删除一份key-value数据
 boolean containsKey(Object key) : map中是否存在指定的key
 boolean containsValue(Object value)  : map中是否存在指定的value
  V get(Object key) : 根据key获取value   
     

void clear() 
 boolean isEmpty()         
  int hashCode()  
 boolean equals(Object o) 
   int size()    

     
     
  // 下面都是视图方法 --> 目的是为了遍历   
 Set<K> keySet() : 获得键集
 Collection<V> values()  : 或者值集  
 Set<Map.Entry<K,V>> entrySet()  : 获得键值对集合



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值