容器(容器中只能存放对象)

Collection(集合)

对应的工具类Collections,包含排序、洗牌等操作

List

ArrayList

本质是Object数组

private transient Object[] elementData

默认数组的长度为10

add时超过10则数组长度增加原来长度的一半

list变数组:(T[])list.toArray(newT[list.size()]);

 

LinkedList

本质是双向的链表

private static  class  Node<E>{

        E item;

        Node<E> next;

       Node<E> prev;

}

add是new Node 节点,然后关联起来

Set(同数学上的集合,元素不重复)

HashSet

本质是HashMap

private transient HashMap<E, Object>map ;

add时用key来存值,value为一个object对象

可以用来做随机抽奖的容器

sortedSet
TreeSet

本质是 TreeMap

构造时可以加入comparator 参数,自定义定义排序规则

add时用key来存值,value为一个object对象

Map(字典)

HashMap

本质是Entry数组和单向链表的结合

transient Entry[] table

static Entry <K,V> implementsMap.Entry<K,V>{

       final K key;

       V value;

       Entry<K,V> next;

       Final int hash;

}

默认数组长度为16

增加容量时2倍增加

put元素时,会先对比hash值和equals内容。判断键值是否相等。

如图:


可以用来做统计文字出现次数的容器

SortedMap

TreeMap

遍历容器的方法:

1. for循环Iterator

为什么重写类中的equals方法必须重写hashcode

将对象放到集合(set、map)时会涉及对比hashcode的情况。如果不重写调用的hashcode方法则会调用object类的hashcode方法(对象的地址),这样会造成内容相同的对象,在内存地址不同的情况下,会被存入set、map中。但是集合中要求对象中的内容不能重复的。这样就矛盾了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值