1、泛型
1.1、概念
- 泛型的形式:,中间定义的类型本能是八大基本类型
- 泛型经常和集合一起使用
- 泛型的引入:为了像定义数组一样在编译时就能检错
1.2、集合中泛型的运用
List<String> arrayList = new ArrayList<>();
arrayList.add("字符串类型");
// arrayList.add(1);
// arrayList.add(1.2);
// arrayList.add('c'); 报错 ,泛型指定为String类型
1.3、泛型方法
泛型方法的语法格式:
- 两个E必须同时出现:第一个E是位置是返回值类型前
- 第二个E是方法参数类型
public static <E>void method(E a){}
1.4、泛型常定义的类型
.
2、集合Collection
2.1、集合的分类
.
注:最下面一层是实现类,其余都是接口,不能直接创建对象
集合的特点:长度可变
2.2、Collection接口的常用API
.
Object[] objects = c.toArray();//将集合转换成数组
System.out.println(Arrays.toString(objects));
- 迭代器(iterator)遍历集合
迭代步骤:
- 获取迭代器 c.itreator();
- 判断是否有下一个迭代对象 c.hasnext();
- 获取当前迭代到的元素 c.next();
Iterator<Integer> it = c.iterator();
while (it.hasNext()){
Integer next = it.next();
System.out.println(next);
}
3、List接口
3.1、特点
数据是有序的,每个元素都有对应的下标
3.2、ArrayList
.
package cn.tedu.collection;
/*本类用于测试List接口*/
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class TestList {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("大力娃");
list.add("头铁娃");
list.add(3, "小蝴蝶");//在指定索引处添加元素
System.out.println(list.indexOf("小蝴蝶"));//获取小蝴蝶第一次出现的索引
System.out.println(list.lastIndexOf("小蝴蝶"));
System.out.println(list.remove(5));
System.out.println(list);
System.out.println(list.get(3));
System.out.println(list.set(6, "蝎子精"));
System.out.println(list);
System.out.println("=====================");
List<String> list2 = new ArrayList<>();
list2.add("1");
list2.add("2");
list2.add("3");
list2.add("4");
System.out.println(list2);
System.out.println(list.addAll(1,list2));//从指定位置添加
System.out.println(list);
System.out.println(list.containsAll(list2));
System.out.println(list.removeAll(list2));
System.out.println(list);
}
}
3.3、四种方式遍历ArrayList集合
- for循环
- 增强for循环
- 迭代器itreator
- listIterator
package cn.tedu.collection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class TestList2 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("喜羊羊");
list.add("美羊羊");
list.add("懒羊羊");
list.add("沸羊羊");
/*集合的迭代方式:
* 1、for循环 (List集合是有序的,元素有对应的下标)
* 2、增强for循环
* 3、iterator
* 4、listIterator
* */
// method01(list);
// method02(list);
// method03(list);
method04(list);
}
private static void method04(List<String> list) {
/*listIterator可以逆序遍历*/
ListIterator<String> stringListIterator = list.listIterator();
while (stringListIterator.hasNext()){
System.out.println(stringListIterator.next());
}
}
private static void method03(List<String> list) {
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
private static void method02(List<String> list) {
for (String s : list) {
System.out.println(s);
}
}
private static void method01(List<String> list) {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
3.4、LinkedList
移除首元素:list.element(); list.peek();
增加元素:list.offer();
移除首元素:list.poll();
package cn.tedu.list;
/*本类用于LinkedList的相关测试*/
import java.util.LinkedList;
public class TestLinkedList {
public static void main(String[] args) {
LinkedList<String> list2 = new LinkedList<>();
list2.add("水浒传");
list2.add("西游记");
list2.add("三国演义");
list2.add("红楼梦");
System.out.println(list2.element());//获取集合的首元素
/*查询系列*/
System.out.println(list2.peek());//获取集合的首元素
/*新增系列*/
System.out.println(list2.offer("聊斋志异"));//在集合最后添加元素
System.out.println(list2.offerFirst("斗罗大陆"));
System.out.println(list2.offerLast("斗破苍穹"));
System.out.println(list2);
/*移除系列*/
System.out.println(list2.poll());//移除首元素
System.out.println(list2.pollFirst());
System.out.println(list2.pollLast());
}
}
4、总结
1、Arraylist底层是数组,查询快但是插入修改慢,适合查询较多的场景
2、LinkedList底层是链表,查询慢但是插入修改快,适合增删多的场景
注意:LinkedList查询慢是指数据量大的情况下查询中间元素,单是查询首尾元素还是比较快的
.