0813集合

集合

功能

集合相当于增强的数组,存储对象,不能存储基本数据类型。

与数组的区别

  • 数组和集合都是容器;
  • 数组长度固定,集合长度可变;
  • 数组中可以存储基本数据类型和引用类型,集合只能存储对象;
  • 数组中存储数据类型是单一的,集合中可以存储任意类型的对象。

特点

  • 只能用于存储对象;
  • 集合长度可变;
  • 集合可以存储不同类型的对象

集合类图

在这里插入图片描述

Collection接口

三个子接口:List(列表)、Set(集)、Queue(队列)
  • List:有序、可重复、有下标
  • Set:无序、不重复、无下标
  • Queue:队列、先进先出

Collection方法

添加
boolean add(E e)确保Collection包含指定元素
boolean addAll(Collection<? extends E> c)将另一个集合元素添加到当前集合
删除
boolean remove(Object o)从集合中删除o
boolean removeAll(Collection<?> c)从集合中删除集合c
判断
boolean isEmpty()判断集合为空
boolean contains(Object o)判断指定o是否在集合里
boolean containsAll(Collection<?> c)判断指定c是否在集合里
获得
int size()返回此Collection中的元素数
Object[] toArray()返回包含此集合中所有元素的数组

遍历

普通for语句

增强for语句

for(元素类型 循环变量名 :Collection对象){
    处理操作
}

迭代器

Iterator 变量名 = Collection对象.iterator();
while(变量名.hasNext()){
    System.out.println(变量名.next());
}

List接口

java.util.List

  • ArrayList:线程不安全,底层使用数组实现,可变长度,查询速度快,增删慢
  • LinkedList:链表结构,底层使用链表实现,可变长度,增删速度快
  • Vector:底层使用数组实现,线程安全,但速度慢,已被ArrayList替代
  • Stack:先进后出,底层调用Vector类中方法,数组实现

ArrayList

有序,可重复

方法功能
boolean add(E e)尾部添加,索引从0开始
boolean add(int index,E e)指定位置添加元素
E set(int index,E e)替换指定位置元素
E get(int index)返回指定位置元素
E remove(int index)移除指定位置元素
List subList(int start,int tail)截取[start,tail)
int size()返回列表长度
boolean contains(Object o)判断列表是否存在指定元素
构造方法
构造方法功能
ArrayList(){}构建一个空列表
ArrayList(int init){}构建一个初始长度的空列表
ArrayList(Collection<? extends E> c)构建一个包含指定集合的列表
特点:
  1. 底层实现数组
  2. 查找快,修改慢
  3. 无参构造,创建空列表,添加第一个才会初始化
  4. 快溢出时,扩容操作(默认扩容大小:原数组长度+(原数组长度>>1))
  5. ArrayList是一个非线程安全的列表

LinkedList

java.util.LinkedList

方法功能
void addFiest(E e)插入头
void addLast(E e)插入尾
E getFirst()返回头
E getLast)返回尾
E removeFirst()移除并返回头
E removeLast()移除并返回尾
特点
  1. 有序,可重复
  2. 双链表,查找慢,添加和删除慢
  3. LinkedList是非同步的

Set接口

java.util.Set

特点

​ 不包含重复元素的collection

子类
  • HashSet:底层调用HashMap中的方法,元素唯一,线程不安全(不同步),存取快
  • TreeSet:不重复,按照指定顺序排列,接口实现Comparable,线程不安全(不同步)
  • LinkedHashSet:哈希表和链表实现了Set接口,元素唯一、有序不重复

HashSet类

特点
  1. HashSet:无序不重复,无索引。
  2. 默认不重复的是虚地址,要想内容不重复,就重写hashcode和equals方法。
  3. 底层是HashMap实现,HashMap底层是由数组+链表+红黑树实现。
  4. HashSet堪称查询速度最快的集合,因为其内部是以HashCode来实现的。它内部元素的顺序是由哈希码来决定的,所以它不保证set的迭代顺序;特别是它不保证该顺序恒久不变。
  5. 无索引,无法使用for循环来遍历,可以使用增强for循环和迭代器来循环。
  6. 造成存泄露的原因:HashSet的remove方法也依赖于哈希值进行待删除节点定位,如果由于集合元素内容被修改而导致hashCode方法的返回值发生变更,那么,remove方法就无法定位到原来的对象,导致删除不成功,从而导致内存泄露。

TreeSet类

特点

无序不重复,排序(compareable接口),线程不安全。

Map接口

java.util.Map

Class LinkedHashMap<K,V>

**注意:**Map存储的键(K)是唯一的

Map集合常用类

HashMap:线程不安全,速度快,允许放null键,null值;(无序)

LinkedHashMap:继承自HashMap,链表;(有序)

Hashtable:线程安全,速度慢,不允许放null键,null值;

ConcurrentHashMap:线程安全且高效

TreeMap:对键进行排序(TreeSet)

方法
方法功能
V put(K key,V value)添加
void clear()清空
V remove(Object key)移除
boolean containsKey(Object key)
boolean containsValue(Object value)
boolean isEmpty()

HashMap类

特点:
  1. 底层实现1.7之前:数组+链表,1.8以后:数组+链表+红黑树
  2. key不允许重复,若重复,后值覆盖前值
  3. HashMap是非线程安全的
常用方法

Object put(Object key,Object val)

Object get(Object key)

Object remove(Object key)

Collections工具类

特点:

  1. 底层实现1.7之前:数组+链表,1.8以后:数组+链表+红黑树
  2. key不允许重复,若重复,后值覆盖前值
  3. HashMap是非线程安全的
常用方法

Object put(Object key,Object val)

Object get(Object key)

Object remove(Object key)

Collections工具类

对象集合排序
对象集合反转
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值