小伞文学网

集集合知识点总结(热门5篇)

admin
导读 实现类:ArrayList类、LinkedList类、Vector类(淘汰)特点:无序、唯一,按照key进行总结的,因为底层key遵照哈希表的结构(数组+链表)哈希表原理:比如放入这个集合的数据对应的那个类:必须重写hasCode方法和equals方法。

集集合知识点总结 第1篇

实现类:Hashtable类、HashMap类、TreeMap类

Map接口(键值对,K:此映射维护的密钥类型;V:映射值的类型)

特点:无序、唯一,按照key进行总结的,因为底层key遵照哈希表的结构(数组+链表)

哈希表原理:比如放入这个集合的数据对应的那个类:必须重写hasCode方法和equals方法。

Hashtable类与HashMap类功能一样

Map接口常用方法

增加:put(K key, V value)

删除:clear() remove(Object key) remove(Object key, Object value)

修改:replace(K key, V value)

查看:entry(K k, V v) entrySet() get(Object key) keySet() size() values()

判断:containsKey(Object key) containsValue(Object value) equals(Object o) isEmpty()

LinkedHashMap实现类

特点:唯一,有序(按照输入顺序进行输出)

HashMap实现类的重要属性:

HashMap实现类的构造器:

特点:唯一、有序(按照升序或降序)

大致原理图:

原理:二叉树,key遵循二叉树的特点,放入集合的key的数据对应的类型内部一定要实现比较器(内部比较器与外部比较器,二选一)

【1】key的类型为String类型:

【2】key的类型为自定义类型:

(1)内部比较器

(2)外部比较器

增强for循环 底层也是通过迭代器实现的

出错原因:迭代器和list同时对集合进行操作。

解决办法:事情让一个完成—>引入新的迭代器:ListIterator

【1】以int 类型为例:

比较思路:将比较的数据做差,然后返回int类型的数据,将这个int类型的数值 按照=0 >0 <0 来做判断!

【2】比较String类型的数据:

String类实现了Comparable接口,这个接口中有一个抽象方法compareTo,String类重写这个方法即可

【3】比较double类型的数据:

Double类实现了Comparable接口,这个接口中有一个抽象方法compareTo

【4】自定义类型数据比较:

外部比较器和内部比较器 哪个更好?

答:外部比较器更好,因为外部比较器使用了多态,扩展性好!

资料整理于:xxx教育

集集合知识点总结 第2篇

泛型(Generic)相当于标签

形式:<>

集合容器类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的对象,所以在之前只能把元素类型设计为Object,之后使用泛型来解决,因为这个时候除了元素的类型不确定,其他的部分是确定的,例如关于这个元素如何保存,如何管理等是确定的。因此此时把元素的类型设计成一个参数,这个类型参数叫做泛型。

Collection,List,ArrayList 这个就是类型参数,即泛型。

如果不使用泛型的话,有缺点: 一般我们在使用的时候基本上往集合中存入的都是相同类型的数据 —>便于管理,所以现在什么引用数据类型都可以存入集合—>不方便!

加入泛型的优点:在编译时期就会对类型进行检查,不是泛型对应的类型就不可以添加入这个集合

泛型总结:

泛型实际就是一个<>引起来的参数类型,这个参数类型具体在使用的时候才会确定具体的类型。

使用了泛型以后,可以确定集合中存放数据的类型,在编译时期就可以检查出来。

使用泛型你可能觉得麻烦,实际使用了泛型才会简单,后续的遍历等操作简单

泛型的类型:都是引用数据类型,不能是基本数据类型。

ArrayList al = new ArrayList(); 在以后可以写为: ArrayList al = new ArrayList<>(); ----钻石运算符

【1】泛型类 实例化对象

【2】继承情况:

【3】注意细节:

什么是泛型方法?

不是带泛型的方法就是泛型方法 (T != E) 泛型方法有要求:这个方法的泛型的参数类型要和当前的类的泛型无关 换个角度:泛型方法对应的那个泛型参数类型和当前所在的这个类 是否是泛型类,泛型是哈 无关

泛型方法定义的时候,前面要加上 原因:如果不加的话,会把T当做一种数据类型,然而代码中没有T类型那么就会报错

调用方法: T的类型是在调用方法的时候确定的

泛型方法能否是静态方法:

泛型参数的继承关系:

A和B是子类父类的关系,但是G(A)和G(B)不存在继承关系,而是并列关系。

发现

A和B是子类父类的关系,G和G不存在子类父类关系,是并列的;

加入通配符?后,G>就变成了G和GxB>的父类

集集合知识点总结 第3篇

实现类:ArrayList类、LinkedList类、Vector类(淘汰)

List接口常用方法 扩展的方法都跟索引有关 特点:不唯一,有序

增加:add(int index, E element)

删除:remove(int index) remove(Object o)

修改:set(int index, E element)

查看:get(int index)

判断:

遍历方式:普通for循环、增强for循环、迭代器

源码类似:StringBuilder

ArrayList实现类底层有两个基本要素:(1)Object类型的数组elementData,(2)size:数组的有效长度

源码:底层数组,在调用构造器的时候,数组长度初始化为10;扩容时,扩展为原数组的倍。

源码:底层数组,在调用构造器时,底层数组为{},在调用add方法后底层数组才重新赋值新数组,新数组的长度为10–>节省了内存,在add后才创建长度为10的数组。

与ArrayList实现类的对比:

联系:底层都是数组的扩容

区别:

LinkedList接口常用方法

增加:addFirst(E e) addLast(E e) offer(E e) offerFirst(E e) offerLast(E e)

删除:poll() pollFirst() pollLast()(<—推荐使用,以后新出的方法,提高代码的健壮性) removeFirst() removeLast()

修改:

查看:element() getFirst() getLast() indexOf(Object o) lastIndexOf(Object o) peek() peekFirst() peekLast()

判断:

遍历方式:普通for循环、增强for循环、迭代器

遍历方式:

ArrayList:数据结构

LinkedList:数据结构

模拟Linked List源码:

集集合知识点总结 第4篇

实现类:HashSet类、TreeSet类

Set接口特点:唯一,无序(相对于List接口,不等于随机)

没有跟索引相关的方法

遍历方式:

HashSet简要原理图: 哈希表=数组+链表;如果放入HashSet中的数据,一定要重写两个方法:hasCode,equals

HashSet底层就是利用HashMap来完成的

【疑问:】

LinkedHashSet类实现唯一且有序

【1】存入Integer类型数据:(底层利用的内部比较器)

特点:唯一,无序(没有按照输入的顺序进行输出),有序(按照升序进行遍历)。

【2】原理:底层:二叉树(数据结构中的一个逻辑结构)

二叉树遍历:

【3】存放String类型数据:

同Integer类型一样

【4】放入自定义类型数据

同比较器案例

实际开发中利用外部比较器好,因为扩展性好(多态)

换一种写法:匿名内部类

集集合知识点总结 第5篇

子接口:List接口,Set接口

常用方法

增加:add(E e) addAll(Collection extends E> c)

删除:clear() remove(Object o) removeAll(Collection> c)

修改:stream() 返回以此集合为源的顺序

查看:iterator() 遍历 size()

判断:contains(Object o) equals(Object o) isEmpty()

遍历方式:增强for循环、迭代器