一.集合 *
1.1 为什么需要集合
数组的长度不可变,而集合可以存储任意类型的对象,并且长度可变。
1.2 集合的分类
1.3 Collection
方法声明 | 功能描述 |
---|---|
boolean add(Object 0) | 向集合中添加一个元素 |
boolean addAll(Collection c) | 将指定集合c中的所有元素添加到该集合中 |
void clear() | 删除该集合中的所有元素 |
boolean remove(Object o) | 删除该集合中指定的元素 |
boolean removeAll(Collection) | 删除该集合中包含指定集合c中的所有元素 |
boolean isEmpty() | 判断该集合是否为空 |
boolean contains(Object o) | 判断该集合中是否包含某个元素 |
boolean containsAll(Coilection c) | 判断该集合中是否包含指定集合c中的所有元素 |
Iterator iterator() | 返回在该集合的元素上进行迭代的迭代器(Iterator),用于遍历该集合所有元素 |
ing size() | 获取该集合元素个数 |
Steam<E> stream() | 将集合源转换为有序元素的流对象 |
1.3.1 List接口
方法声明 | 功能描述 |
---|---|
Object get(int index) | 获取集合索引处的元素 |
Object remove(int index) | 删除集合索引处的元素 |
void add(int index, Object element) | 将元素element插入在List集合的指定索引位置 |
int indexOf(Object o) | 返回对象o在List集合中首次出现的位置索引 |
int lastIndexOf(Object o) | 返回对象o在List集合中最后一次出现的位置索引 |
List subList(int fromIndex, int tolndex) | 返回从索引fromIndex(包括)到tolndex(不包括)处所有元素集合组成的子集合 |
ArrayList实现类查询较多的时候用
优缺点:
缺点: 增删改效率低
优点: 遍历和查找元素高效
LinkedList实现类增删较多的时候用
优缺点:
缺点: 增删改效率高
优点: 遍历查找元素慢
import java.util.ArrayList;
import java.util.List;
public class demo {
public static void main(String[] args) {
//1.实例化ArrayList
//ArrayList arrayList = new ArrayList();
//1.实例化LinkedList
LinkedList arrayList = new LinkedList();
//添加元素
arrayList.add("张三");
arrayList.add("李四");
arrayList.add("李四");
arrayList.add("王五");
System.out.println(arrayList); //[张三, 李四, 李四, 王五]
//返回index索引处的元素
System.out.println(arrayList.get(0)); //张三
//对象在集合中第一次出现的位置的索引
System.out.println(arrayList.indexOf("李四")); //1
//对象在集合中最后一次出现的位置的索引
System.out.println(arrayList.lastIndexOf("李四")); //2
//修改索引处的元素
arrayList.set(0,"卡卡");
System.out.println(arrayList); //[卡卡, 李四, 李四, 王五]
//删除索引处的元素
arrayList.remove(0);
System.out.println(arrayList); //[李四, 李四, 王五]
//判断集合是否为空
System.out.println(arrayList.isEmpty());
//判断集合是否有该元素
System.out.println(arrayList.contains("李四"));
//获取集合元素个数
System.out.println(arrayList.size());
//集合转数组
for(int i=0;i<arrayList.toArray().length;i++) {
System.out.print(arrayList.toArray()[i]+","); //李四,李四,王五,
}
}
}
1.3.2 Set接口
Set集合和LIst集合存取方式一样,二者的区别在与List集合有索引; List是有序的,而Set是无序的,无索引;
1.3.2.1 HashSet集合
根据对象的哈希值来确定元素在集合存储的位置,因此具有良好的存取和查找性能;
1.3.2.2 TreeSet集合
采用平衡二叉树来存储元素,这样的结构可以保证TreeSet集合中没有重复的元素,并且可以对元素进行排序。
方法声明 | 功能描述 |
---|---|
Object first() | 返回TreeSet集合的首个元素 |
Object last() | 返回TreeSet集合的最后一个元素 |
Object lower(Object o) | 返回TreeSet集合中小于给定元素的最大元素,如果没有返回null |
Object floor(Object o) | 返回TreeSet集合中小于或等于给定元素的最大元素,如果没有返回null |
Object higher(Object o) | 返回TreeSet集合中大于给定元素的最小元素,如果没有返回null |
Object ceiling(Object o) | 返回TreeSet集合中大于或等于给定元素的最小元素,如果没有返回null |
Object pollFirst() | 移除并返回集合的第一个元素 |
Object pollLast() | 移除并返回集合的最后一个元素 |
1.3.2.3 示例
import java.util.HashSet;
import java.util.TreeSet;
public class hset {
public static void main(String[] args) {
//HashSet
HashSet hashSet = new HashSet();
hashSet.add("张三");
hashSet.add("李四");
hashSet.add("王五");
hashSet.add("99");
hashSet.forEach(has -> System.out.println(has)); //99 李四 张三 王五
//TreeSet
TreeSet<Object> treeSet = new TreeSet<>();
treeSet.add("张三");
treeSet.add("李四");
treeSet.add("王五");
treeSet.add("99");
treeSet.forEach(has -> System.out.println(has)); //99 张三 李四 王五
}
}
1.3.3 foreach与forEach遍历List集合
1.3.3.1 语法
foreach遍历集合:
for(容器中元素类型 临时变量 : 容器变量) {
//执行语句
System.out.println(临时变量);
}
forEach遍历集合:
容器变量.forEach(临时变量 -> System.out.println(临时变量));
1.3.3.2 示例
public class Test {
public static void main(String[] args) {
ArrayList<Object> arrayList = new ArrayList<>();
arrayList.add(10);
arrayList.add(20);
arrayList.add(30);
arrayList.add(40);
//使用forrach遍历集合
for(Object obj : arrayList) {
System.out.println(obj); // 10 20 30 40
}
System.out.println("------------------------");
//使用forEach遍历集合
arrayList.forEach(obj -> System.out.println(obj)); // 10 20 30 40
}
}
1.4 Map
1.4.1 HashMap集合
键和值允许为空,但是键不能重复,且集合中的元素是无序的;底部采用哈希表
1.4.2 TreeMap集合
键和值允许为空,但是键不能重复,且集合中的元素是有序的;底部采用二叉树
1.4.3 LinkedHashMap集合
底层和HashMap一致,用哈希表实现,区别是LinkedHashMap还使用了一个双向链表实现顺序存取;并且LinkedHashMap集合是有序的
1.4.3 forEach遍历Map集合
1.4.3.1 语法
容器变量.forEach( (key,value) -> System.out.println(key +":"+ value) );
1.4.3.2 示例
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.TreeMap;
public class maps {
public static void main(String[] args) {
//HashMap 无序
HashMap hashMap = new HashMap();
hashMap.put("name", "小黑子");
hashMap.put("sex", "男");
hashMap.put("age", "25");
hashMap.put("hobby", "打篮球");
//forEach
hashMap.forEach((key,value) -> System.out.println((key +":"+ value)));
/*
* 输出结果: sex:男 name:小黑子 age:25 hobby:打篮球
*/
System.out.println("-----------------------");
//TreeMap 无序
TreeMap treeMap = new TreeMap();
treeMap.put("name", "小黑子");
treeMap.put("sex", "男");
treeMap.put("age", "25");
treeMap.put("hobby", "打篮球");
treeMap.forEach((key,value) -> System.out.println((key +":"+ value)));
/*
* 输出结果: age:25 hobby:打篮球 name:小黑子 sex:男
*/
System.out.println("-----------------------");
//linkedHashMap 有序
LinkedHashMap linkedHashMap = new LinkedHashMap();
linkedHashMap.put("name", "小黑子");
linkedHashMap.put("sex", "男");
linkedHashMap.put("age", "25");
linkedHashMap.put("hobby", "打篮球");
linkedHashMap.forEach((key,value) -> System.out.println((key +":"+ value)));
/*
* 输出结果: name:小黑子 sex:男 age:25 hobby:打篮球
*/
}
}
1.5 泛型
泛型可以跟定操作的数据类型,在定义集合时,可以使用<参数类型>指定集合中存储的数据类型,格式如下:
ArrayList<Object> list = new ArrayList<Object>();
import java.util.ArrayList;
public class arrayList {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(100);
list.add(1000);
list.forEach(li -> System.out.println(li));
/*
* 输出 1 100 1000
*/
}
}
二.JDBC *
2.1 什么是JDBC
JDBC(Java Database Connectivity,Java 数据库连接)是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系型数据库,并使用SQL语句来完成对数据库中数据的查询、新增、更新和删除等操作。
2.2 JDBC常用API
Driver 接口: 驱动
DriverManager 类: 用于加载JDBC驱动并且创建于数据库的连接
Connection 接口: 代表java程序和数据库的连接对象,获取连接对象后才能访问数据库
Statement 接口: 执行静态的sql语句,并反回一个结果
PreparedStatement 接口: sql语句可以用占位符"?"来代替参数
ResultSet接口: 用于保存JDBC执行查询时反回的结果集
2.3 连接数据库
第一步: 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver"); //数据库8.0以上要加cj
第二步: 获取数据库连接
Connection conn = DriverManager.getConnection(String url,String user,String pwd);
第三步: 获取Statement对象
Statement stmt = conn.createStatement();
第四步: 执行sql
ResultSet rs = stmt.executeQuery(sql);
第五步: 操作结果集
第六步: 关闭连接,释放资源