Java之collection集合、常见数据结构、List和泛型
原创
©著作权归作者所有:来自51CTO博客作者邀风醉明月的原创作品,请联系作者获取转载授权,否则将追究法律责任
目录
- Collection集合常用API
- Collection集合的遍历方式
- 方式一:迭代器
- 总结
- 方式二:foreach/增强for循环
- 方式三:lambda表达式
- Collection集合存储自定义类型的对象
- 数据结构概述、栈、队列
- 数组
- 链表
- 二叉树、二叉查找树
- 平衡二叉树
- 红黑树
- List集合的遍历方式小结
- ArrayList集合的底层原理
- LinkedList集合的底层原理
- 泛型的概述和优势
- 自定义泛型类
- 自定义泛型方法
- 自定义泛型接口
- 泛型通配符、上下限
集合概述
总结
1、数组和集合的元素存储的个数问题。
数组定义后类型确定,长度固定
集合类型可以不固定,大小是可变的。
2、数组和集合存储元素的类型问题。
数组可以存储基本类型和引用类型的数据。
集合只能存储引用数据类型的数据。
3、数组和集合适合的场景
数组适合做数据个数和类型确定的场景。
集合适合做数据个数不确定,且要做增删元素的场景。
Collection集合的体系特点
总结
1、集合的代表是?
Collection接口。
2、Collection集合分了哪2大常用的集合体系?
List系列集合:添加的元素是有序、可重复、有索引。
Set系列集合:添加的元素是无序、不重复、无索引。
3、如何约定集合存储数据的类型,需要注意什么?
集合支持泛型。
集合和泛型不支持基本类型,只支持引用数据类型。
Collection集合常用API
package com.zixin.d1_collection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
public class CollectionDemo1 {
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
list.add("java");
list.add("java");
list.add("HTML");
System.out.println(list);
// list.clear();
// System.out.println(list);
System.out.println(list.size());
System.out.println(list.contains("java"));
list.remove("java");
System.out.println(list);
Object [] arrs = list.toArray();
System.out.println("数组:"+ Arrays.toString(arrs));
}
}
Collection集合的遍历方式
方式一:迭代器
总结
1、迭代器的默认位置在哪里。
lterator iterator():得到迭代器对象,默认指向当前集合的索引0
2、迭代器如果取元素越界会出现什么问题。
会出现NoSuchElementException异常。
方式二:foreach/增强for循环
package com.zixin.d3_collection_traversal;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo02 {
public static void main(String[] args) {
Collection<String> lists = new ArrayList<>();
lists.add("赵敏");
lists.add("小昭");
lists.add("素素");
lists.add("灭绝");
System.out.println(lists);
for(String ele : lists){
System.out.println(ele);
}
}
}
方式三:lambda表达式
Collection集合存储自定义类型的对象
总结
1、集合中存储的是元素的什么信息?
集合中存储的是元素对象的地址。
常见数据结构
数据结构概述、栈、队列
数组
链表
二叉树、二叉查找树
平衡二叉树
红黑树
总结
List系列集合
List集合特点、特有API
package com.zixin.d5_collection_list;
import java.util.ArrayList;
import java.util.List;
public class ListDemo01 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Java");
list.add("MySQL");
list.add("MySQL");
list.add(2,"HTML");
System.out.println(list);
System.out.println(list.remove(2));
System.out.println(list);
System.out.println(list.get(2));
System.out.println(list.set(1,"高斯林"));
System.out.println(list);
}
}
总结
1、List系列集合特点
ArrayList、LinekdList :有序,可重复,有索引
2、List的实现类的底层原理
ArrayList底层是基于数组实现的,根据查询元素快,增删相对慢。LinkedList底层基于双链表实现的,查询元素慢,
增删首尾元素是非常快的。
List集合的遍历方式小结
ArrayList集合的底层原理
LinkedList集合的底层原理
package com.zixin.d5_collection_list;
import java.util.LinkedList;
public class ListDemo03 {
public static void main(String[] args) {
LinkedList<String> stack = new LinkedList<>();
stack.push("第一颗子弹");
stack.addFirst(("第二课子弹"));
stack.addFirst("第三课子弹");
stack.addFirst("第四课子弹");
System.out.println(stack);
System.out.println(stack.pop());
System.out.println(stack);
LinkedList<String> queue = new LinkedList<>();
queue.addLast("1号");
queue.addLast("2号");
queue.addLast("3号");
queue.addLast("4号");
System.out.println(queue);
System.out.println(queue.removeFirst());
System.out.println(queue);
}
}
集合的并发修改异常问题
泛型深入
泛型的概述和优势
自定义泛型类
1、泛型类的核心思想;
把出现泛型变量的地方全部替换成传输的真实数据类型
2、泛型类的作用
编译阶段约定操作的数据的类型,类似于集合的作用。
自定义泛型方法
自定义泛型接口
泛型通配符、上下限