1.什么是集合?集合和数组有什么区别?
集合和数组都是java中提供的容器,可以用来存储多个数据。
集合和数组既然都是容器,它们有什么区别呢?
• 数组的长度是固定的。集合的长度是可变的。
• 数组中存储的是同一类型的元素,可以存储任意类型数据。集合存储的都是引用数据类型。如果想存储基本类型数据需要存储对应的包装类型。
• 数组中存储的元素类型是一致的,集合可以不一致,但是建议一致(开发中都是一致的)
Collection:List的特点是元素有序、元素可重复 ; Set的特点是元素不可重复。
集合的继承体系图:
单列集合:集合中的元素是单个单个存储的
Collection(接口):定义了单列集合共有的方法
2.总结集合常用类的继承体系。并说明list和set的区别
List(接口): 元素可以重复,元素有索引,元素存取有序
ArrayList实现类: 查询快,增删慢,线程不安全
Vector 实现类:查询快,增删慢,线程安全
LinkedList 实现类:查询慢,增删快
Set(接口): 元素不可以重复(唯一),元素无索引,元素存取无序
HashSet实现类:元素不可以重复(唯一),元素无索引,元素存取无序
LinkedHashSet实现类:元素不可以重复(唯一),元素无索引,元素存取有序
TreeSet实现类:元素不可以重复(唯一),元素无索引,元素存取无序,可以对集合中的元素进行排序
3.Iterator接口的常用方法:next()和hasnext()?迭代器的原理?从指针方面说明
迭代:即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
4.增强for循环格式?
for(元素的数据类型 变量 : Collection集合or数组){
//写操作代码
}
增强for循环必须有被遍历的目标,目标只能是Collection或者是数组;增强for(迭代器)仅仅作为遍历操作出现,不能对集合进行增删元素操作,否则抛出ConcurrentModificationException并发修改异常
5.和泛型有关的知识,比较零碎
集合中是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。当我们在取出每一个对象,并且进行相应的操作,这时必须采用类型转换。
泛型带来了哪些好处呢?
将运行时期的ClassCastException,转移到了编译时期变成了编译失败。
避免了类型强转的麻烦。
定义和使用含有泛型的类:
修饰符 class 类名<代表泛型的变量> { }
定义和使用含有泛型的方法:
修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }
定义和使用含有泛型的接口:
修饰符 interface接口名<代表泛型的变量> { }
泛型是一种未知的数据类型,定义在类上的泛型,使用类的时候会确定泛型的类型,定义在方法上的泛型,会在使用方法的时候确定泛型,定义在接口上的泛型,需要使用接口的时候确定泛型。
**泛型通配符:**不知道使用什么类型来接收的时候,此时可以使用?,?表示未知通配符。
泛型通配符的高级使用:泛型受限
泛型的上限:
- 格式: 类型名称 <? extends 类 > 对象名称
- 意义: 只能接收该类型及其子类
泛型的下限:
- 格式: 类型名称 <? super 类 > 对象名称
- 意义: 只能接收该类型及其父类型
6.总结数据结构:堆栈、队列、数组、链表和红黑树的特点?
数据结构 : 其实就是存储数据和表示数据的方式
堆栈:stack,又称堆栈,它是运算受限的线性表,其限制是仅允许在表的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作。
先进后出(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素)。栈的入口、出口的都是栈的顶端位置。
这里两个名词需要注意:
压栈:就是存元素。即,把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置。
弹栈:就是取元素。即,把栈的顶端位置元素取出,栈中已有元素依次向栈顶方向移动一个位置。
• 队列:queue,简称队,它同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除。先进先出。
• 数组:Array,是有序的元素序列。查找元素快:通过索引,可以快速访问指定位置的元素。特点:查询快,增删慢。
• 链表:linked list,由一系列结点node(链表中每一个元素称为结点)组成,结点可以在运行时i动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。特点:增删快,查询慢。
“红黑树”。红黑树是一种自平衡的二叉查找树。它是一种特殊的二叉查找树,红黑树的每一个节点上都有存储位表示节点的颜色,可以是红或者黑;红黑树不是高度平衡的,它的平衡是通过"红黑树的特性"进行实现的;
红黑树的特性:
(1) 每一个节点或是红色的,或者是黑色的。
(2)根节点必须是黑色
(3)每个叶节点(Nil)是黑色的;(如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节点)
(4)如果某一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点相连的情况)
(5)对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点;
在进行元素插入的时候,和之前一样; 每一次插入完毕以后,使用黑色规则进行校验,如果不满足红黑规则,就需要通过变色,左旋和右旋来调整树,使其满足红黑规则;
7.掌握和树有关的知识,这是数据结构很重要的点,重在理解
如果树中的每个节点的子节点的个数不超过2,那么该树就是一个二叉树。
二叉查找树的特点:
(1) 左子树上所有的节点的值均小于等于他的根节点的值
(2) 右子树上所有的节点值均大于或者等于他的根节点的值
(3)每一个子节点最多有两个子树
8.List接口的特点?ArrayList集合和LinkedList集合的特点?
java.util.List接口继承自Collection接口,List接口特点:
(1)它是一个元素存取有序的集合。
(2)它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。
(3)集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。
ArrayList:元素增删慢,查找快
LinkedList集合:数据存储的结构是链表结构。方便元素添加、删除的集合。元素增删快,查找慢