标签:随机 框架 直接 代码 判断 void height init lca
1.1 内存中对数据进行存储和管理的“容器”:数组,集合
1.2 数组存储的特点和缺点
特点:
缺点:
集合存储的优点:
2.1 Java 集合概述
Java 集合可分为 Collection 和 Map 两种体系
2.2 单列集合框架结构:Collection
继承树图:
概述:
2.3 Collection接口常用方法:
3.1 遍历Collection的两种方式:
第一种 增强for循环
第二种 Iterator接口
3.2 java.utils包下定义的迭代器接口:Iterator
hasNext() : 判断是否还下一个元素
next() :①指针下移 ②返回指针指向的元素
4.举例:
5.图示说明:
3.3 Iterator接口的方法
在调用it.next()方法之前必须要调用it.hasNext()进行检测。若不调用,且下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常。
3.4 增强for循环:(foreach循环)
遍历集合:
遍历数组:
4.1 存储的数据特点:存储的元素是序的且可重复的
4.2 常用方法:
List接口的常用实现类:
4.3 [ 面试题 ] ArrayList,LinkedList,Vector的区别是什么?
三者都是List的实现类,存储的元素都是有有序的可重复的。
ArrayList : List的主要实现类底层是一个数组,查找快,增删慢。线程不安全的效率高。
LinkedList : 底层是一个双向链表,查找慢,增删快
Vector :古老的实现类,底层是一个数组,查找快,增删慢。线程安全的效率低。
4.4 存储的元素的要求:自定义类必须重写equals方法
4.5 ArrayList
(1)ArrayList构造器的说明:
new ArrayList() : 底层创建一个长度为10的数组
new ArrayList(int initialCapacity) : 创建一个长度为initialCapacity的数组
(2)如何向ArrayList中添加数据?
当我们创建一个空参构造器的ArrayList的对象时,底层会为我们创建一个长度为10的数组,当我们向容器中添加第11个元素时,底层会进行扩容,扩容为原来的1.5倍(创建一个长度为原来的1.5倍的数组,同时将原有的数据复制到新的数组中)。
4.6 案例:
5.1 存储的数据特点:存储的元素是无序的且不可重复
Set 判断两个对象是否相同不是使用 == 运算符,而是根据 equals 方法
5.2 HashSet元素添加方式:
当我们向集合中添加元素时,会先调用该元素的hashCode方法来决定元素存放的位置。如果该位置没有其它元素则直接存放。如果该位置已经有其它元素,则调用该元素的equals方法进行比较。
如果返回值为true则认为这两个元素是相等的则不能再存放。如果返回值是false则以链表的形式存放该数据。(jdk1.8如果该链表位置上的元素到达8个时则改成红黑树的形式存放数据。
HashSet 集合判断两个元素相等的标准:两个对象通过 hashCode() 方法比较相等,并且两个对象的 equals() 方法返回值也相等。
5.3常用方法:没额外增加其它的方法
5..4常用实现类:
5..5存储元素所在类的要求:
HashSet,LinkedHashSet : 自定义类需要重写equals和hashCode方法
TreeSet : 自定义类实现Comparble接口,或者 创建一个Compartor接口实现类的对象
5..6TreeSet的使用:
说明:
5.7 思考?
自然排序 :
定制排序 :
5.8 LinkedHashSet的使用说明:
继承了HashSet底层实现原理和HashSet一样。除此之外还维护了一张链表用来记录元素存放的顺序。那么就可以按照元素存放的顺序进行遍历。
5.9 HashSet的实现原理
当我们向集合中添加元素时,会先调用该元素的hashCode方法来决定元素存放的位置。如果该位置没有其它元素则直接存放。如果该位置已经有其它元素,则调用该元素的equals方法进行比较。
如果返回值为true则认为这两个元素是相等的则不能再存放。如果返回值是false则以链表的形式存放该数据。(jdk1.8)如果该链表位置上的元素到达8个时则改成红黑树的形式存放数据。
继承关系树:
6.1 存储数据特点:存储的是键值对
说明:
图示:
6.2 常用实现类:
6.3 常用方法
6.4 面试题:
相同点:都是以key和value的形式存储;
不同点:
(2)HashMap的底层实现原理?
当我们向HashMap中存放元素(K1,V1)时,会先根据K1的HashCode方法来决定在数组中存放的位置。如果该位置上没有其它元素则直接放入。如果该位置上有其它元素(K2,V2),那么会调用K1的equals方法和K2进行比较。如果返回结果为true说明两个元素的Key(特点:无序且不可重复)值相同。那么V1将会覆盖V2。如果返回结果为false,那么(K1,V1)将以链表的形式存放该内容。如果链表的数量超过8则将链表改成红黑树。
6.5 结构说明
new HashMap() :
通过空参的构造器创建一个HashMap的对象。该对象底层会创建一个长度为16的数组,加载因子为0.75。当集合中的元素的个数超过12时会进行扩容,扩容为原来的2倍。
说明:
6.7 读取配置文件的操作实现
6.8 Collections工具类的使用
- reverse(List):反转 List 中元素的顺序
- shuffle(List):对 List 集合元素进行随机排序
- sort(List):根据元素的自然顺序对指定 List 集合元素升序排序
- sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
- swap(List,int, int):将指定 list 集合中的 i 处元素和 j 处元素进行交换
- Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
- Object max(Collection,Comparator):根据 Comparator 指定的顺序,返回给定集合中的最大元素
- Object min(Collection)
- Object min(Collection,Comparator)
- int frequency(Collection,Object):返回指定集合中指定元素的出现次数
- void copy(List dest,List src):将src中的内容复制到dest中
- boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换 List 对象的所旧值
JAVASE(十四) 集合: 数组和集合、Collection、Iterator、List、Set、Map
标签:随机 框架 直接 代码 判断 void height init lca
原文地址:https://www.cnblogs.com/wushaopei/p/12259448.html