栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java容器总结1

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java容器总结1

Java容器总结1 1 框架


Collection:单列数据

Map:双列数据

2 Collection接口 2.1 简介

1 存放多个元素,每个元素可以是Object

2 有些实现类可以存放重复元素:Collection—List—Vector,ArrayList,linkedList

3 有些实现类不可以:Collection—set—HashSet,TreeSet

2.2 Collection常用方法

add( ) remove( ) contains( ) isEmpty( ) clear( )

addAll( ) containsAll( ) removeAll( )

2.3 Collection接口遍历方法

iterator()迭代器 haveNext().Next()

增强for循环

Collection 没有.get(index)方法

3 List接口 3.1 简介

继承了Collection

可以用索引,可以存放相同元素,有序

3.2 常用方法

add( ) add(index,Object) addAll( )

get(index) indexOf() lastIndexOf( )

remove( ) set(index,object)

subList( )

3.3 List接口遍历

迭代器

增强for

普通for

4 ArrayList类 4.1ArrayList

底层是一个Object类型的数组

和Vector相比:线程不安全,多线程不建议使用

扩容机制:

创建时无参:大小为0,第一次加入元素扩容为10,之后数组满扩容,1.5倍

创建时有参:大小为参数,数组满扩容,1.5倍

5 Vector类

底层也是对象数组

线程安全

扩容机制:

创建时无参:大小为10,数组满扩容,2倍

创建时有参:大小为参数,数组满扩容,2倍

无参时有默认大小——线程安全?

6 linkArrayList类

底层维护了一个双向链表

有头指针first,尾指针last

每个节点有prev和next,item

linkArrayList的扩容就是一个一个连接到最后 不要设置大小

remove可以不带参——默认移除第一个

Vector和ArrayList的remove不可以不带参

增删linkedList效率高,改查ArrayList效率高

7 Set接口 7.1 简介

Set不能用索引,不能有相同元素,无序,只能由一个null

7.2 常用方法

和Collection一样

7.3 遍历

迭代器

增强for

不能用索引

8 HashSet 8.1 机制

底层是HashMap,HashMap底层是数组+链表+红黑树(1.8)

table里是HashMapNode

entrySet里是

先处理对象的HashCode,生成索引,索引不冲突直接加入

索引冲突就通过equals方法循环比较,都不同就加入最后,如果有相同的就放弃加入

放入的时候key是当前值,value是默认的

可以重写equals和hashCode方法

8.2扩容机制:

扩容后会重新计算索引再分配

没参数

首次添加扩容到16

1 加入节点 ,不管加入在哪个位置(同一索引上的链表中,或者不同索引上)

达到临界值(threshold) 数组*0.75(加载因子loadFactor) 就会扩容两倍

2 如果反复增加相同hash值的 不同对象(8个) 就会落在相同索引的链表上

当链表长度大于8时,就开始判断当前数组数是否达到了64个

如果没达到就会2倍扩容 扩到64 此时节点还是加在了链表后面(可以超过8)

如果已经达到了64,就会将单链表转换成一颗红黑树

***有参的情况特殊 如果加入了15个 会在第13个加入时 扩容到32个

***最好不要有参

9 linkedHashSet

底层是linkedHashMap

数组+双向链表

table里HashMapNode

有序

扩容同HashSet类似

10 TreeSet

可以有序 无参

底层是TreeMap

默认按字符串大小

可以传自定义比较器

如果传入一个比较器 比较字符串大小 那么相同长度的字符串只能加入一个

底层是替换了value 没有 替换key

加入的对象 是 key

value有默认

如果没有传入比较器,就会将传入的对象向上转型为 Comparable 类型 调用key本身的compareto方法

如果传入了比较器,就按比较器比较

默认 字符大小

11 Map 11.1 简介

双列,key不重复,value可重复

相同的key value会替换

11.2 常用方法

put() remove( ) get( ) size( ) isEmpty( ) clear( ) containsKey( )

11.3 Map接口遍历

1 keySet 返回key的Set 可以增强for循环 也可以 迭代器

2 values()(只有值) 返回Collection集合

3 entrySet 返回entry类型的set entry有getKey和getValue

迭代器迭代返回的set(Map.Entry类型)

12HashMap

哈希表+链表+红黑树

扩容—

线程不安全

13 HashTable

键值对都不能为null

方法基本和HashMap一致

线程安全

扩容机制:

无参底层初始化为 11

无参—默认大小—线程安全?

临界值 11*0.75 = 8

扩容 *2+1

最好不要有参(有参也会先按参数配置大小)

14 Propreties类

继承了HashTable 用于从.properties文件中读取数据

15 linkedHashMap类

与HashMap类似

16 TreeMap

如果传入的比较器是字符串长度比较器

相同长度的key,value会被替换

默认按字符串大小排序

无参

TreeSet以及TreeMap无参

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/785730.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号