数据结构:
(1)组织数据的方式。
(2)常见的数据结构。
(3)数据结构的特点:
栈:先进后出
队列:先进先出
数组:查询快,增删慢
链表:查询慢,增删快
List的三个儿子(:
(1)List三个儿子的特点:
ArrayList:
底层数据结构是数组, 查询快,增删慢。
线程不安全,效率高。
Vector:
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
LinkedList:
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
(2)你准备使用谁?
要安全吗:
要:Vector
不要:ArrayList或者LinkedList
查询多:ArrayList
增删多:LinkedList
如果你不知道,就用ArrayList。
(3)案例:
ArrayList:
//字存储符串并遍历:
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList<String> array = new ArrayList<String>();
array.add("hello");
array.add("world");
array.add("java");
//迭代器
Iterator<String> it = array.iterator();
while (it.hasNext()) {
String s = it.next();
System.out.println(s);
}
//普通for
for (int x = 0; x < array.size(); x++) {
String s = array.get(x);
System.out.println(s);
}
//增强for
for (String s : array) {
System.out.println(s);
}
}
}
// 存储自定义对象并遍历:
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListTest {
public static void main(String[] args) {
// 创建集合对象
ArrayList<Student> array = new ArrayList<Student> ();
// 创建元素
Student s1 = new Student("成龙", 26);
Student s2 = new Student("吴京", 23);
Student s3 = new Student("刘亦菲", 18);
// 添加元素
array.add(s1);
array.add(s2);
array.add(s3);
// 迭代器
Iterator<Student> it = array.iterator();
while (it.hasNext()) {
Student s = it.next();
System.out.println(s.getName() + "---" + s.getAge());
}
// 普通for
for (int x = 0; x < array.size(); x++) {
Student s = array.get(x);
System.out.println(s.getName() + "---" + s.getAge());
}
// 增强for
for (Student s : array) {
System.out.println(s.getName() + "---" + s.getAge());
}
}
}
LinkedList:
//存储字符并遍历:
import java.util.LinkedList;
import java.util.Iterator;
public class LinkedListDemo2 {
public static void main(String[] args) {
LinkedList<String> link = new LinkedList<String>();
link.add("hello");
link.add("world");
link.add("java");
//迭代器
Iterator<String> it = link.iterator();
while (it.hasNext()) {
String s = it.next();
System.out.println(s);
}
//普通for
for (int x = 0; x < link.size(); x++) {
String s = array.get(x);
System.out.println(s);
}
//增强for
for (String s : link) {
System.out.println(s);
}
}
}
存储自定义对象并遍历:
import java.util.LinkedList;
import java.util.Iterator;
public class LinkedListTest {
public static void main(String[] args) {
// 创建集合对象
LinkedList<Student> link = new LinkedList<Student> ();
// 创建元素
Student s1 = new Student("成龙", 26);
Student s2 = new Student("吴京", 23);
Student s3 = new Student("刘亦菲", 18);
// 添加元素
link.add(s1);
link.add(s2);
link.add(s3);
// 迭代器
Iterator<Student> it = link.iterator();
while (it.hasNext()) {
Student s = it.next();
System.out.println(s.getName() + "---" + s.getAge());
}
// 普通for
for (int x = 0; x < link.size(); x++) {
Student s = link.get(x);
System.out.println(s.getName() + "---" + s.getAge());
}
// 增强for
for (Student s : link) {
System.out.println(s.getName() + "---" + s.getAge());
}
}
}
泛型:
(1)泛型是把明确数据类型的工作推迟到了创建对象或者调用方法时才去明确的一种特殊数据类型。
(2)泛型的格式:
<数据类型>
(3)泛型的好处:
A:优化了程序设计,解决了黄色警告线的问题。
B:把运行时期异常提前到了编译期。
C:避免了强制类型转换。
(4)什么时候用泛型?
看API,如果类或者接口后面有<>,说明这里用泛型。
一般来说,集合中用。
4:增强for:
(1)格式:
for(数组或者Collection集合中的元素的数据类型 变量 :数组或者Collection集合对象)
{
直接使用变量。这个时候,变量其实就是元素。
}
(2)好处:
方便了数组或者Collection集合的遍历。
(3)弊端:
在使用的时候,要注意,数组或者Collection集合对象不能为null。
可变参:
(1)在定义功能的时候,我们不知道别人将来要传递多少参数,用可变参数。
(2)格式:
修饰符 返回值类型 方法名(数据类型... 变量)
{
...
}
注意:
A:这个变量本质是指定数据类型的一个数组。会自动把参数进行封装。
B:
如果一个方法有多个参数,可变参数必须放在最后。