集合

mac2025-12-20  6

https://docs.oracle.com/javase/8/docs/api/overview-summary.html

使用数组的局限性

                       如果要存放多个对象,可以使用数组,但是数组有局限性                        比如 声明长度是10的数组                       不用的数组就浪费了                        超过10的个数,又放不下

ArrayList存放对象

                      为了解决数组的局限性,引入容器类的概念。 最常见的容器类就是                       ArrayList                       容器的容量"capacity"会随着对象的增加,自动增长                       只需要不断往容器里增加英雄即可,不用担心会出现数组的边界问题。

list,Map

 

ArrayList,hashMap,hashSet

公共接口Map <Key,Value>

将键映射到值的对象。映射不能包含重复的键;每个键最多可以映射到一个值。

Map<k,v> map  = new HashMap<k,v>(),k键唯一,v可是object类型

Set<v> set = new HashSet<v>();v不可重复,唯一,只可有一个null

Set不提供get()来获取指定位置的元素 所以遍历需要用到迭代器,或者增强型for循环

 

 

hashMap和hashTable

HashTable

底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做了相关优化初始size为11,扩容:newsize = olesize*2+1计算index的方法:index = (hash & 0x7FFFFFFF) % tab.length

 

HashMap

底层数组+链表实现,可以存储null键和null值,线程不安全初始size为16,扩容:newsize = oldsize*2,size一定为2的n次幂扩容针对整个Map,每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入插入元素后才判断该不该扩容,有可能无效扩容(插入后如果扩容,如果没有再次插入,就会产生无效扩容)当Map中元素总数超过Entry数组的75%,触发扩容操作,为了减少链表长度,元素分配更均匀计算index方法:index = hash & (tab.length – 1)

 

 

 

 

最新回复(0)