一、System(掌握)
1.1 定义
System
类包含一些有用的类字段和方法。它不能被实例化。
1.2 常用方法
- currentTimeMillis
- exit
- gc
package com.qf.sys;
public class Demo01 {
public static void main(String[] args) {
/**
* static long currentTimeMillis()
返回以毫秒为单位的当前时间。
static void exit(int status)
终止当前正在运行的 Java 虚拟机。
static void gc()
运行垃圾回收器。
*/
System.out.println(System.currentTimeMillis());
show();
System.out.println("show方法结束");
}
public static void show() {
System.out.println("hahaha");
for (int i = 0; i < 100; i++) {
System.out.println(i);
if (i == 66) {
// break;
// return;
// 结束整个程序
System.exit(0);
}
}
System.out.println("循环结束");
}
}
package com.qf.sys;
public class Demo02 {
public static void main(String[] args) {
for (int i = 0; i < 500000; i++) {
new Stu("张三", i);
}
System.out.println("==================");
System.gc();
System.out.println("==================");
for (int i = 10000000; i < 10000010; i++) {
new Stu("张三", i);
}
}
}
class Stu{
String name;
int age;
public Stu(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
protected void finalize() throws Throwable {
System.out.println(name + "++====++" + age + "被回收啦");
}
}
二、集合(掌握)
2.1 定义
- 存储对象的容器
- 存储对象的对象
- 集合中存储的数据都是引用类型的数据,基本类型的数据会转换成对应的包装类进行存储
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6VkaNYBL-1607429734790)(img\集合体系图.jpg)]
2.2 Collection常用方法
boolean add(E e) 确保此 collection 包含指定的元素(可选操作)。 boolean addAll(Collection<? extends E> c) 将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。 boolean remove(Object o) 从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。 boolean removeAll(Collection<?> c) 移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 boolean retainAll(Collection<?> c) 仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。 void clear() 移除此 collection 中的所有元素(可选操作)。 boolean contains(Object o) 如果此 collection 包含指定的元素,则返回 true。 boolean containsAll(Collection<?> c) 如果此 collection 包含指定 collection 中的所有元素,则返回 true。 boolean equals(Object o) 比较此 collection 与指定对象是否相等。 boolean isEmpty() 如果此 collection 不包含元素,则返回 true。 Iterator<E> iterator() 返回在此 collection 的元素上进行迭代的迭代器。 int size() 返回此 collection 中的元素数。 Object[] toArray() 返回包含此 collection 中所有元素的数组。
package com.qf.coll;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
public class Demo01 {
public static void main(String[] args) {
/**
*/
// 创建Collection对象,引用指向实现类ArrayList
Collection c = new ArrayList();
// 向集合中添加内容,可以添加Object和其子类对象
c.add(110);
c.add(11.0);
c.add("妖妖灵");
c.add(true);
c.add('哈');
c.add(new Stu("张三", 23));
// 集合可以直接输出
System.out.println(c);
Collection c1 = new ArrayList();
c1.add("床前明月光");
// 可以添加整个集合
c1.addAll(c);
System.out.println(c1);
c.remove('哈');
System.out.println(c);
// 移出c1中两个集合中的交集内容
c1.removeAll(c);
System.out.println(c1);
c.add('哈');
c1.removeAll(c);
System.out.println(c1);
c1.addAll(c);
System.out.println(c1);
// 取两个集合的交集
c1.retainAll(c);
System.out.println(c1);
System.out.println(c);
// c.add('哈');
System.out.println("==============");
c.remove(110);
c.add(110);
System.out.println(c1);
System.out.println(c);
System.out.println(c1.equals(c));
System.out.println(c1.containsAll(c));
System.out.println(c1.size());
Object[] objects = c.toArray();
System.out.println(Arrays.toString(objects));
}
}
class Stu{
String name;
int age;
public Stu(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Stu [name=" + name + ", age=" + age + "]";
}
}
三、List接口(掌握)
3.1 定义
- 有序的集合接口
- 元素有下标
- 集合中可以存储重复的元素
3.2 常用方法
3.2.1 增加
3.2.2 删除
3.2.2 修改
3.2.2 查询
3.2.2 其他方法
四、ArrayList(掌握)
4.1 定义
List
接口的大小可变数组的实现。- 实现了所有可选列表操作,并允许包括
null
在内的所有元素。 - 此实现不是同步的
- 默认的构造方法创建的集合初始容量为 10 的
4.2 创建ArrayList对象
ArrayList()
构造一个初始容量为 10 的空列表。
ArrayList(Collection<? extends E> c)
构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
ArrayList(int initialCapacity)
构造一个具有指定初始容量的空列表。
4.3 常用方法
4.3.1 增加
package com.qf.arraylist;
import java.util.ArrayList;
public class Demo02 {
public static void main(String[] args) {
/**
boolean add(E e)
将指定的元素添加到此列表的尾部。
void add(int index, E element)
将指定的元素插入此列表中的指定位置。
boolean addAll(Collection<? extends E> c)
按照指定 collection 的迭代器所返回的元素顺序,将该 collection 中的所有元素添加到此列表的尾部。
boolean addAll(int index, Collection<? extends E> c)
从指定的位置开始,将指定 collection 中的所有元素插入到此列表中。
*/
ArrayList list = new ArrayList();
System.out.println(list);
list.add(110);
list.add(11.0);
list.add(true);
list.add("张三");
list.add(null);
list.add(new Stu("李四", 23));
System.out.println(list);
list.add(2, false);
System.out.println(list);
ArrayList list1 = new ArrayList();
list1.add(110);
list1.add(11.0);
list1.add(true);
System.out.println(list1);
list.addAll(list1);
System.out.println(list);
}
}
class Stu{
String name;
int age;
public Stu(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Stu [name=" + name + ", age=" + age + "]";
}
}
4.3.2 删除
package com.qf.arraylist;
import java.util.ArrayList;
public class Demo03 {
public static void main(String[] args) {
/**
void clear()
移除此列表中的所有元素。
E remove(int index)
移除此列表中指定位置上的元素。
boolean remove(Object o)
移除此列表中首次出现的指定元素(如果存在)。
void trimToSize()
将此 ArrayList 实例的容量调整为列表的当前大小。
*/
ArrayList list = new ArrayList();
list.add(110);
list.add(11.0);
list.add(true);
list.add("张三");
list.add(null);
list.add(new Stu("李四", 23));
System.out.println(list);
list.remove("张三");
System.out.println(list);
list.remove(1);
System.out.println(list);
// 下标的优先级更高一些
// list.remove(110);
System.out.println(list);
list.add("张三");
list.add("张三");
System.out.println(list);
list.remove("张三");
System.out.println(list);
ArrayList list1 = new ArrayList();
list1.add(110);
list1.add(11.0);
list1.add(true);
System.out.println(list1);
// 移出集合和另一个集合的交集
list.removeAll(list1);
System.out.println(list);
list.clear();
System.out.println(list);
}
}
4.3.2 修改
package com.qf.arraylist;
import java.util.ArrayList;
public class Demo04 {
public static void main(String[] args) {
/**
E set(int index, E element)
用指定的元素替代此列表中指定位置上的元素。
*/
ArrayList list = new ArrayList();
list.add(110);
list.add(11.0);
list.add(true);
list.add("张三");
list.add(null);
list.add(new Stu("李四", 23));
System.out.println(list);
list.set(0, 220);
System.out.println(list);
}
}
4.3.2 查询
package com.qf.arraylist;
import java.util.ArrayList;
import java.util.Arrays;
public class Demo05 {
public static void main(String[] args) {
/**
boolean contains(Object o)
如果此列表中包含指定的元素,则返回 true。
E get(int index)
返回此列表中指定位置上的元素。
int indexOf(Object o)
返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。
boolean isEmpty()
如果此列表中没有元素,则返回 true
int lastIndexOf(Object o)
返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1。
int size()
返回此列表中的元素数。
Object[] toArray()
按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组。
*/
ArrayList list = new ArrayList();
list.add(110);
list.add(11.0);
list.add(true);
list.add("张三");
list.add("张三");
list.add(null);
list.add(new Stu("李四", 23));
System.out.println(list);
boolean b = list.contains("张三");
System.out.println(b);
Object obj = list.get(3);
System.out.println(obj);
int index = list.indexOf("张三");
System.out.println(index);
index = list.lastIndexOf("张三");
System.out.println(index);
System.out.println(list.size());
Object[] array = list.toArray();
System.out.println(Arrays.toString(array));
}
}
五、数组结构和链表结构(掌握)
5.1 定义
- ArrayList是典型的底层基于数组实现的集合
- 元素有序,有索引
- 查询修改速度快,增删速度慢
- LinkedList是典型的链表结构的数据
- 元素在内存中存储的时候是地址是无序的
- 但是元素之间是用链表链接起来的,元素在集合中是有序的
- 每个元素都会记录前一个和后一个数据
- 查询和修改速度慢,增删速度快
5.2 插入数据速度比较
package com.qf.arraylist;
import java.util.ArrayList;
import java.util.LinkedList;
/**
* 比较ArrayList和LinkedList插入数据的速度
* @author Dushine2008
* @version
* @date 2020年6月9日
*/
public class Demo07 {
public static void main(String[] args) {
ArrayList list01 = new ArrayList();
LinkedList list02 = new LinkedList();
long list01Start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
list01.add(0, "张三");
}
long list01End = System.currentTimeMillis();
System.out.println("ArrayList插入100000条数据消耗时间:" + (list01End - list01Start));
long list02Start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
list02.add(0, "张三");
}
long list02End = System.currentTimeMillis();
System.out.println("LinkedList插入100000条数据消耗时间:" + (list02End - list02Start));
}
}
六、泛型(掌握)
6.1 定义
- 预设一个数据类型
- 参数化类型
- 在添加数据的时候执行预编译,保证插入数据的纯洁性
- 后面不用再进行强制类型转换
6.2 案例
- 泛型和泛型类
package com.qf.genericity;
public class Demo02 {
public static void main(String[] args) {
Person p = new Person();
p.id = 110;
System.out.println(p);
p.id = "11110";
System.out.println(p);
Person<Integer> pp = new Person<Integer>();
pp.id = 1110;
}
}
class Person<T>{
T id;
String name;
int age;
public Person() {
super();
}
public Person(T id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
- 泛型类中定义多种泛型
package com.qf.genericity;
public class Demo03 {
public static void main(String[] args) {
Stu<String, Character> s1 = new Stu<String, Character>();
s1.id = "2016020305";
s1.gender = '男';
}
}
class Stu<T,K>{
T id;
K gender;
String name;
int age;
@Override
public String toString() {
return "Stu [id=" + id + ", gender=" + gender + ", name=" + name + ", age=" + age + "]";
}
}
- 泛型VS非泛型
package com.qf.genericity;
import java.util.ArrayList;
import java.util.Iterator;
public class Demo04 {
public static void main(String[] args) {
ArrayList list01 = new ArrayList();
list01.add("刘备");
list01.add("关羽");
list01.add("张飞");
list01.add("黄忠");
list01.add("赵云");
Iterator it01 = list01.iterator();
while (it01.hasNext()) {
String name = (String) it01.next();
System.out.println(name.charAt(0));
}
ArrayList<String> list02 = new ArrayList<String>();
list02.add("刘备");
list02.add("关羽");
list02.add("张飞");
list02.add("黄忠");
list02.add("赵云");
Iterator<String> iterator02 = list02.iterator();
while (iterator02.hasNext()) {
String name = iterator02.next();
System.out.println(name.charAt(0));
}
}
}