数据结构:就是组织数据的方式。
数据结构 + 算法 (多了解)
UML + 设计模式
常见的数据结构:
栈、队列、链表、数组、树、图、堆...
栈(LIFO表):先进后出 (入口又叫压栈;出口又叫弹栈。入口和出口是在一端的),生活中的例子:强压子弹,弹夹。
队列(FIFO表):先进先出(入口出口在两端),生活举例:排队。
数组:存储多个同一种元素的容器。
特点:元素都有编号,方便获取。
数组的优缺点:(相对于链表而言)
优点:有索引所以:查询快
缺点:长度固定所以:增删慢
链表:把一些结点通过索引(指针)连接起来的数据结构。
结点:由指针(地址)域和数值域组成。
链表优缺点:
优点:增删快
缺点:查询满
安全(同步):效率低:
去银行办业务,保证安全所以效率就会低。
List:三个子类
ArrayList
底层数据结构是数组,但是对象长度可变,查询快,增删慢
线程不安全,效率高
Vector
底层数据是数组,对象长度可变,查询快,增删满
线程安全,效率低
LinkedList
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
ArrayList 的 判断重复的contains方法底层使用的是equals方法。
面试题:
运用LinkedList模拟一个栈结构
思路:底层使用LinkedList的addFirst()方法,get()或者getFirst()方法,模拟。
与时代接轨的网站推荐:
iteye.com 网站 了解新技术
单词记忆:
Enumeration 枚举的意思
element 元素的意思
增强for循环:
格式:
for(数组或者Collection集合中元素的类型 变量名:数组或者Collection集合对象)
{
使用变量名即可。
}
作用:简化数组和集合的遍历(用来代替迭代器,底层是迭代器。不能在用增强for的时候,用集合对象对集合做出修改)
例如:
//循环遍历arr 数组
int[] arr = {1,2,2};
for(int x:arr)
{
System.out.println(x);
}
注意:到此为止 集合的遍历方式已经有5种了:
1.输出
2.普通for循环
3.增强for循环
4.普通迭代器
5.ListIterator 迭代器
范型的应用:
范型类:范型加在类上,在创建对象的时候明确数据类型
范型方法:把范型加在方法上。(放在返回值的前面)
明确数据类型的工作放到了调用方法的时候
范型接口:
子类实现范型接口的方式1:(这个时候范型类型的指定是在创建类的时候确定下来的)
类名 implements 接口名<明确类型>(){
方法名 (明确数据类型 形式参数名){}
}
子类实现范型接口的方式2:(这个时候范型类型的指定是在创建对象时指定的)
类名<E> implements 接口名<E>(){
方法名 (范型 形式参数名){}
}
范型只存在于编译期,运行期就没有范型了,这样是为了提高效率。
|
|