一.LinkedList(双向链表)
1.特有功能
* public void addFirst(E e)及addLast(E e)
* public E getFirst()及getLast()
* public E removeFirst()及public E removeLast()
* public E get(int index);
2.栈和队列数据结构
- 栈:先进后出
- 队列:先进先出
//用LinkedList模拟栈数据结构的集合
public class Stack {
private LinkedList list = new LinkedList(); //创建LinkedList对象
public void in(Object obj) {
list.addLast(obj); //封装addLast()方法
}
public Object out() {
return list.removeLast(); //封装removeLast()方法
}
public boolean isEmpty() {
return list.isEmpty(); //封装isEmpty()方法
}
}
注意:涉及索引操作会遍历数据。
二.泛型
1.泛型概述和基本使用
a.概述
*泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
b.泛型好处
*提高安全性(将运行期的错误转换到编译期) *省去强转的麻烦
c.泛型基本使用
<>中放的必须是引用数据类型
d.泛型使用注意事项
前后的泛型必须一致,或者后面的泛型可以省略不写(1.7的新特性菱形泛型)
2.泛型的由来
* 通过Object转型问题引入
* 早期的Object类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题。也就存在这隐患,所以Java提供了泛型来解决这个安全问题。
三.增强for的概述和使用
1.概述
*简化数组和Collection集合的遍历
2.格式:
*for(元素数据类型 变量 : 数组或者Collection集合) {
使用变量即可,该变量就是元素
}
3.好处
*简化遍历
4.坏处
* 丢掉了索引信息。
public class Foreach_test {
public static void main(String[] args) {
int[][] arr = {{1,2},{3,4}};
List<Object> list = new ArrayList<>();
list.add(1);
list.add("abcd");
list.add(45);
list.add(34);
//遍历集合
for(Object object : list){
System.out.println(object);
}
//遍历数组
for(int[] i : arr){
for(int j : i){
System.out.println(j);
}
}
}
}
5.三种迭代的能否删除
* 普通for循环,可以删除,但是索引要--
* 迭代器,可以删除,但是必须使用迭代器自身(比如ListIterator)的remove方法,否则会出现并发修改异常
* 增强for循环不能删除
四.可变参数的概述和使用
1.可变参数概述
*定义方法的时候不知道该定义多少个参数
2.格式
*修饰符 返回值类型 方法名(数据类型… 变量名){}
public int getSum(int... a)
3.注意事项:
* 这里的变量其实是一个数组
* 如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个
public class Variable_test {
public static void main(String[] args) {
int sum1 = getSum(33,5);
System.out.println(sum1);
int sum2 = getSum(45,23,78,3);
System.out.println(sum2);
}
public static int getSum(int... arr){
int sum = 0;
for (int i : arr) {
sum += i;
}
return sum;
}
}
五.Arrays工具类的asList()方法
*Arrays工具类的asList()方法的使用
*Collection中toArray(T[] a)泛型版的集合转数组