1.JavaSE知识点总结(集合)

第七章 集合
1.集合中可以存储哪些元素
集合中存储的都是java的内存地址(或者说集合中存储的是引用)
2.集合的继承结构图Collection、Map
请添加图片描述请添加图片描述
3.Collection接口的常用方法
boolean add(E e)
确保此 collection 包含指定的元素(可选操作)。
boolean addAll(Collection<? extends E> c)
将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。
boolean contains(Object o)
如果此 collection 包含指定的元素,则返回 true。
boolean containsAll(Collection<?> c)
如果此 collection 包含指定 collection 中的所有元素,则返回 true。
boolean remove(Object o)
从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
boolean removeAll(Collection<?> c)
移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
boolean isEmpty()
如果此 collection 不包含元素,则返回 true。
void clear()
移除此 collection 中的所有元素(可选操作)。
boolean retainAll(Collection<?> c)
仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
int size()
返回此 collection 中的元素数。
4.Collection的遍历方法
Iterator iterator()
返回在此 collection 的元素上进行迭代的迭代器
1.先通过集合对象.iterator()获取迭代器it
while(it.hasNext()){
System.out.println(it.next());
}
5.List集合
List特有的方法(通过下标操作)
特点:有序可重复
void add(int index, E element)
在列表的指定位置插入指定元素(可选操作)。
boolean addAll(int index, Collection<? extends E> c)
将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作)。
int indexOf(Object o)
返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。
int lastIndexOf(Object o)
返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。
E set(int index, E element)
用指定元素替换列表中指定位置的元素(可选操作)。
E get(int index)
返回列表中指定位置的元素。
6.Set集合特点
特点:无序不可重复
7.ArrayList集合
底层数据结构 :底层是数组数据结构,非线程安全的
初始化容量:底层new了一个Object数组,初始容量10,
并且仅当添加第一个元素的时候才会初始化容量
扩容倍数:扩容后的容量为原容量的1.5倍
优点:检索效率高,
原因: 每个元素在空间存储上,内存地址是连续的,占用空间大小相同,知道首元素的内存地址和下标
就可以根据一个数学表达式计算出,元素的内存地址
缺点:1.随机增删效率低,添加和删除末尾元素效率不受影响
2.无法存储大数据量(在空间存储上很难找到一块很大的连续的内存空间)
优化策略:预估计一个初始化容量减少数组的扩容次数。
8.LinkedList集合
底层数据结构:底层是双向链表,没有初始化容量(first和last都是null)
优点 :随机增删效率较高(链表上的元素在空间存储上,内存地址不连续,不涉及大量元素的位移)
缺点 :查询效率较低(每次查找都需要从头结点开始往下遍历)
9.Vector集合
底层数据结构:底层是数组的数据结构,线程安全,因为有synchronzied的关键字修饰,但是效率低
初始化容量 :初始化容量为10,
扩容 :扩容为原容量2倍。 10->20->40
和ArrayList集合的区别
10.HashSet集合是HashMap
无序不可重复
在new的时候实际上底层new了一个HashMap的集合,向HashSet集合中储存元素,实际上
存储到了HashMap的集合中了,HashMap底层是哈希表数据结构
11.SortedSet接口:可自动排序的集合 子类有:TreeTest
12.TreeSet集合底层是TreeMap集合
有序不可重复
底层是TreeMap集合
13.Map集合的常用方法
void clear()
从此映射中移除所有映射关系(可选操作)。
boolean containsKey(Object key)
如果此映射包含指定键的映射关系,则返回 true。
boolean containsValue(Object value)
如果此映射将一个或多个键映射到指定值,则返回 true。
V get(Object key)
返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
boolean isEmpty()
如果此映射未包含键-值映射关系,则返回 true。
V put(K key, V value)
将指定的值与此映射中的指定键关联(可选操作)。
V remove(Object key)
如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
int size()
返回此映射中的键-值映射关系数。
14.HashMap集合的常用方法
Set<Map.Entry<K,V>> entrySet()
返回此映射中包含的映射关系的 Set 视图。
Set keySet()
返回此映射中包含的键的 Set 视图。
15.HashMap底层的数据结构
1.jdk1.7之前是数组加链表
jdk1.8以后是数组加链表加红黑树
2.底层是哈希表数据结构,非线程安全,
当哈希表上的单链表中的元素大于8个的时候,
单链表这种数据结构就会变为红黑树数据结构,当红黑树上的节点小于6时,会重新把
红黑树变成单链表数据结构,这种方式是为了提高检索效率,
3.初始容量为16,
4.默认加载因子为0.75, 当底层数组容量达到75%的时候,数组开始扩容
5.扩容后的倍数是之前的2倍,必须是2倍的原因(官方推荐的),为了要达到散列分布均匀,为了提高HashMap集合存储的效率,
6.key和value允许为null。
7.为什么重写hashCode + equals
因为当只重写hashCode的时候, new十个对象的话,就会产生10个内存地址,进而产生10个不同的哈希值,
在没有哈希碰撞的前提下,就会生成10个不同的下标,那么就会都放进数组中,但是如果equals比较的话是TRUE的话
那么就是10个相同的对象都放进去了,本来只放一个的 ,这样就产生了矛盾,
16.HashTable集合底层是什么数据结构
底层是哈希表数据结构,线程安全,带有synchronzied的关键字修饰,但是效率低
初始容量为11,扩容后的倍数是左移一位加1(2倍加1)
key和value不允许为null
17.HashTable和HashMap集合的区别
1.前者线程安全,后者反之
2.前者扩容倍数为二倍加一,后者是二倍
3.前者key和value不能为null,后者key和value都可以为null(key值null只能有一个,不然就会覆盖)
18.HashTable下的Properties有一定的理解
1.线程安全
2.key和value都是String类型
3.又被 成为属性类对象
4.两个方法:
存:new Properties().set(key,value);
取:new Properties().get(key);
19.SortedMap接口下的实现类:TreeMap
TreeMap和TreeSet底层都是自平衡二叉树,遵循左小右大原则。
遍历采用中序遍历的方法。左根右。
20.TreeMap的key可排序是怎样实现的
实现了java.util.Comparator接口
21.Map集合的遍历多种方法
Set<Map.Entry<K,V>> entrySet()
返回此映射中包含的映射关系的 Set 视图。
Set keySet()
返回此映射中包含的键的 Set 视图。
22.集合的泛型
泛型的本质是参数化类型,可以在类、接口、方法中创建
好处1: 消除了强制类型转换
好处2:类型安全
好处3:优化性能
缺点1:类型不多样化
泛型擦除:泛型只存在于代码编译阶段,在进入JVM之前,于泛型相关的信息会被擦除
23.集合的工具类:Collections的常用方法
sort(List list)
根据元素的自然顺序 对指定列表按升序进行排序。
sort(List list, Comparator<? super T> c)
根据指定比较器产生的顺序对指定列表进行排序。
synchronizedList(List list)
返回指定列表支持的同步(线程安全的)列表。
synchronizedMap(Map<K,V> m)
返回由指定映射支持的同步(线程安全的)映射。
synchronizedSet(Set s)
返回指定 set 支持的同步(线程安全的)set。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值