常见容器类型

1.List

1.1基本方法

  • List的行为根据equals的行为有所变化
  • contansAll()会遍历传入的List并调用源Listcontains()进行比较,无关顺序
  • subList()的操作都是针对源List,包括subList.get()方法都是基于源List,偏移量(fromIndex)加上索引值
方法功能
contains()传入对象引用,确定某个对象是否在列表中
containsAll()传入待比较的List,如果被包含则返回Ture,与顺序无关
get()获取指定索引的对象引用
add()添加元素到数组中
addAll(index,subList)目标List插入到指定的位置上
remove()传入对象引用,移除该对象
removeAll()源List中移除所有的目标List,基于equals()
indexOf()传入对象引用,获取对象在列表的索引
subList()传入起始、结束索引,获取子列表,但是一切的操作都是针对源List
retainAll()保留了所有同时存在于源List、目标List中的元素
isEmpty()判断是否为空数组
clear()清除数组内容
toArray()List变为Array

1.2基本子类

1.2.1 ArrayList

在这里插入图片描述
ArrayList :长于随机访问元素,但是插入和移除元素速度慢,有关删除和插入的操作与System.arraycopy有关。

该方法的主要作用是复制src数组从srcPos开始的length长度的内容,复制到dest目标数组中destPos开始到destPost+length范围。如果src=dest那么就是对源数组进行操作
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);

ArrayList remove的本质:将i位置的值覆盖掉,就地覆盖

 System.arraycopy(es, i + 1, es, i, newSize - i);

常用方法

  • 构造方法:

    方法作用
    ArrayList()无参构造方法,创建空[]
    ArrayList(Collection<? extends E> c)利用Arrays.copyOf(c.toArray())创建相应类型的内部数组
    ArrayList(int initialCapacity)根据给定的initialCapacity创建指定大小的内部数组

  • 由于java不支持改变数组长度,所以该操作都涉及到创建新数组,复制原数组元素到新数组的操作,创建新数组操作Object[] grow(int minCapacity)(内部具体方法是Arrays.copyOf()),复制操作为System.arraycopy()

    方法作用
    boolean add(E e)新增元素到新数组末尾
    void add(int index, E element)将元素插入到数组的指定位置,将index开始的元素复制到index+1开始的位置
    boolean addAll(Collection<? extends E> c)将c插入到内部数组末尾.System.arraycopy(a, 0, elementData, s, numNew);
    boolean addAll(int index, Collection<? extends E> c)将c插入到内部数组index开始的位置,原处于index后的元素后移
  • 方法作用
    void clear()将size设为0,内部数组元素全部指向null
    E remove(int index)删除index位置的元素(fastRemove)
    boolean remove(Object o)o.equals比较,删除第一个内容相等的元素(fastRemove)
    boolean removeAll(Collection<?> c)删除被c包含的元素(首先原数组修改,然后使用shiftTailOverGap,复制出无尾部元素的新数组)
    boolean removeIf(Predicate<? super E> filter)删除所有符合条件的元素(首先原数组修改,然后使用shiftTailOverGap,复制出无尾部元素的新数组)
    boolean retainAll(Collection<?> c)保留所有被c包含的元素,删除其他元素(batchRemove(c, true, 0, size))
  • 方法作用
    void ensureCapacity(int minCapacity)若内部数组大小小于minCapacity则增加数组长度
    E set(int index, E element)修改index位置的元素
  • 方法作用
    E get(int index)获取index位置的元素
    int indexOf(Object o)返回第一个equals的元素的索引,不存在元素则返回-1
    int lastIndexOf(Object o)获取从尾部开始第一个equals的元素的index
    boolean isEmpty()是否为空,检查size是否等于0
    boolean contains(Object o)直接调用indexOf方法,大于等于0则表示元素存在于内部数组中
    size()返回内部维护的成员变量size
    List< E > subList(int fromIndex, int toIndex)返回子数组
    Object[] toArray()返回ArrayList的数组形式
    T[] toArray(T[] a)将当前ArrayList对象维护填充到a数组中。T应该与源数组一致。

1.2.2 LinkedList

LinkedList链表操作,以较低的代价在List中间进行插入和删除操作,提供优化的顺序访问
在这里插入图片描述

2. Set

对于每个值只保存一个,不重复保存
HashSet:以相当复杂的方式存储元素,提供最快的元素获取方式,但是数据存储无序
HashMap保存数据,通过add方法插入的数据作为HashMap的键存储,无get方法,contain()方法也仅判断数据在HashMap是否作为建存在
在这里插入图片描述
TreeSet按照比较结果的升序保存数据
在这里插入图片描述
LinkedHashSet按照被添加的顺序保存对象
在这里插入图片描述

3. Map

3.1基本方法

方法功能
size()返回当前持有的键值对数量
isEmpty()当前是否持有键值对
containsKey(Object o)/containsValue(Object o)是否持有该键/值
get(Object key)取得键对应的值,如果没有则返回null
put(K key, V value)将键值对保存到容器中,若键已存在,对应的值将会被更新
remove(Object key)删除键值对,如果不存在返回null,否则返回被删除的值
putAll(Map<? extends K, ? extends V> m)遍历m,将键值对put进Map
clear()清空数组
Set keySet()返回Map的所有键,(The set is backed by the map, so changes to the map are reflected in the set, and vice-versa)
Collection values()Returns a Collection view of the values contained in this map. The collection is backed by the map, so changes to the map are reflected in the collection, and vice-versa.
Set<Map.Entry<K, V>> entrySet()获取map映射关系,修改会影响到Map
interface Entry<K, V>.getKey()获取Entry对应的键
interface Entry<K, V>.getValue()获取Entry对应的值

3.1.1 遍历Map的一种方法

public static void main(String[] args) {
        Map<String,Object> map = new HashMap<>();
        map.put("name","adfadf");
        map.put("age","24");
        map.put("phone","15912312228");
        System.out.println(map.entrySet());
        for (Map.Entry<String,Object> e:map.entrySet()){
            System.out.println(e.getKey());
            System.out.println(e.getValue());
        }
    }

3.1.2 修改会影响到Map

The set is backed by the map, so changes to the map are reflected in the set, and vice-versa.

    public static void main(String[] args) {
        Map<String,Object> map = new HashMap<>();
        map.put("name","adfadf");
        map.put("age","24");
        map.put("phone","15912312228");
        System.out.println(map.entrySet());
        for (Map.Entry<String,Object> e:map.entrySet()){
            System.out.println(e.getKey());
            System.out.println(e.getValue());
            e.setValue(e.getValue()+"_abc");
        }
        System.out.println(map);
    }
//======== 输出
//[phone=15912312228, name=adfadf, age=24]
//phone
//15912312228
//name
//adfadf
//age
//24
//{phone=15912312228_abc, name=adfadf_abc, age=24_abc}

3.2基本子类

HashMap提供了最快的查找速度,但是不保证元素顺序
在这里插入图片描述
TreeMap按照比较结果的升序保存。
在这里插入图片描述
LinkedHashMap按照插入的顺序保存元素,同时保留了HashMap的查找速度
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值