java 集合 常用_Java 常用集合

d5b1813591a9

---|Collection: 单列集合,定义了最常规的操作方法

---|List: 有存储顺序, 可重复

---|ArrayList:    数组实现, 查找快, 增删慢

---|LinkedList:   链表实现, 增删快, 查找慢实现了栈 队列

---|Vector:   和ArrayList原理相同, 但线程安全, 效率略低

---| Stack 类

---|Set: 无存储顺序, 不可重复

---|HashSet  线程不安全,存取速度快。底层是以哈希表实现的

---|TreeSet  红-黑树的数据结构,默认对元素进行自然排序(String)。如果在比较的时候两个对象返回值为0,,那么元素重复。 Comparable,Comparator。

---|LinkedHashSet

---| Map: 键值对

---|HashMap 采用哈希表实现,所以无序

---|TreeMap 可以对键值进行排序

---|HashTable 线程同步

---|LinkedHashMap 对Map集合进行增删提高效率

Collection 定义了最基本的操作方法:

1、增加(add/addAll)

2、删除(remove/removeAll/clear/retainAll)

3、查询(contain/containAll/iterator/size/isEmpty

4、转数组(toArray/toArray(T[]))

AbstractCollection Collection的一个实现类,实现了Collection的方法,

https://www.cnblogs.com/android-blogs/p/5566212.html

其中,比较有趣的地方:

privatestaticfinalintMAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

-8是因为数组对象的头部会占用这8个字节

List

d5b1813591a9

d5b1813591a9

List接口相对Collection扩展了几个方法:

indexOf(),lastIndexOf(),subList(),set()

AbstractList

public abstract class AbstractList extends AbstractCollection implements List

继承自AbstractCollectio 实现了 List的接口

其中

checkForComodification 用于检测列表是否在其它线程被修改

final void checkForComodification() {

if (modCount != expectedModCount)

throw new ConcurrentModificationException();

}

ArrayList

详细介绍: https://www.cnblogs.com/xujian2014/p/4625346.html

Set

d5b1813591a9

AbstractSet 继承了AbstractCollection实现了Set接口

AbstractSet的Hash值是所有元素的hash值的总和

Java中的Hash原理:取数据内容的每个char值按照一个算法做运算得到的值,例如String的hash算法就比较简单:

public int hashCode() {

int h = hash;

if (h == 0 && value.length > 0) {

char val[] = value;

for (int i = 0; i < value.length; i++) {

h = 31 * h + val[i];

}

hash = h;

}

return h;

}

HashSet

d5b1813591a9

HashSet不能添加重复的元素,当调用add(Object)方法时候,

首先会调用Object的hashCode方法判hashCode是否已经存在,如不存在则直接插入元素;

如果已存在则调用Object对象的equals方法判断是否返回true,如果为true则说明元素已经存在,如为false则插入元素。

HashSet底层数据实现用HashMap,那每次插入的数据其实只放在haspmap的key当中,而hashmap存的value都固定为一个空置Object

// PRESENT是向map中插入key-value对应的value 13

// 因为HashSet中只需要用到key,而HashMap是key-value键值对; 14

// 所以,向map中添加键值对时,键值对的值固定是PRESENT 15

private static final Object PRESENT =new Object();

http://www.cnblogs.com/skywang12345/p/3311252.html

Map

d5b1813591a9

更完整的解析

https://blog.csdn.net/panweiwei1994/article/details/77185902

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值