1.栈:先进后出,存入元素称为压栈,取出元素称为弹栈。
队列:先进先出。
数组:查询快,增删慢。
链表:增删快,查询满。由一条链子连接多个元素组成,每个元素包括自身数据和下一个元素的地址。
双向链表:每个元素由一个数据和前后两个元素的地址值三部分组成。
循环链表:最后一个元素存储的地址值指向第一个元素。
2.hash:把任意长度的输入通过哈希算法变换成固定长度的输出,该输出称为该输入的哈希值。同一输入的哈希值一
定相同,而哈希值相同不一定是同一输入。
3.集合:为了方便对多个对象的操作,就要对多个对象进行存储,java就提供了集合。
特点:A:长度可变。B:只能存储引用类型。C:可以存储多种类型。
4.根据需求不同,java也提供了许多不同的集合类:
5.Collection:该接口是集合的顶层结构,定义了集合的共性功能。可以向其中存储对象,称为元素。
成员方法:A:添加功能:boolean add(Object obj):往集合中添加一个元素
boolean addAll(Collection c):往集合中添加多个元素
B:删除功能:void clear():清空所有元素
boolean remove(Object o):从集合中删除一个元素
boolean removeAll(Collection c):从集合中删除另一个集合的元素
C:判断功能:boolean contains(Object o):判断集合中是否包含指定的元素
boolean containsAll(Collection c):判断集合中是否包含另一个集合的元素
boolean isEmpty():判断集合是否为空。
D:交集功能:boolean retainAll(Collection c):求出交集并返回。
E:迭代器:集合特有遍历方式。
F:长度功能:int size():返回集合中元素的个数
exp:向集合中添加学生对象并遍历。
package collectionpractice;//创建标准java类。
public class Student {
private String name;
private int age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
package collectionpractice;
import java.util.ArrayList;
import java.util.Collection;
public class StudentTest {
public static void main(String[] args) {
Student s1=new Student("a", 1);//创建学生类对象。
Student s2=new Student("b", 2);
Student s3=new Student("c", 3);
Collection<Student> c=new ArrayList<Student>();//collection为接口,创建实现类对象
c.add(s1);//向集合中添加元素
c.add(s2);
c.add(s3);
for (Student s : c) {//增强for循环遍历集合
System.out.println(s);//由于在student中重写过方法tostring,因此可以直接打印。
}
/* Student [name=a, age=1]
Student [name=b, age=2]
Student [name=c, age=3]*/
}
}
在编程时,可以用alt+shift+s快速创建标准java类。
6.迭代器:Iterator,是依赖于集合的存在,因此和集合搭配使用。
迭代器遍历集合步骤:A:通过集合对象获取到迭代器对象。
B:通过迭代器对象hasNext方法判断是否有元素。
C:通过迭代器对象next方法获得元素。
exp:同为上述学生类,在用迭代器遍历:
Iterator<Student> i=c.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
7.List:该集合元素有序(先进先出)且可重复。
A:添加功能:void add(int index,Object obj):在指定的位置添加元素。
B:删除功能:Object remove(int index):通过指定的索引删除元素,并把删除的元素返回。
C:get(int index) 返回列表中指定位置的元素。
D:Object set(int index,Object obj),替换指定索引初的元素。
E:List中元素顺序可以被洗牌Collections.shuffle(list)
F:List中元素顺序可以被倒序Collections.reverse(list)
G:Collections.sort(list)对List元素排序
exp:创建list集合,调用功能并遍历:
package collectionpractice;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class StudentTest2 {
public static void main(String[] args) {
Student s1=new Student("a", 1);//创建学生类对象。
Student s2=new Student("b", 2);
Student s3=new Student("c", 3);
Student s4=new Student("a", 1);
List<Student> l=new ArrayList<Student>();
l.add(s1);
l.add(s2);
l.add(s3);
for (Student s : l) {
System.out.println(s);
}
System.out.println("-------------------------------");
l.add(1, s4);//在索引1处添加s4
Collections.shuffle(l);//洗牌功能。
for (Student s : l) {//增强for输出,每次结果都不同。
System.out.println(s);
}
}
}
8.ArrayList:有顺序,可以重复,底层数据结构时数组,查询快,增删慢,线程不安全,效率高。
9.LinkedList:有序可重复,底层结构是链表,查询慢增删快,线程不安全,效率高。
特有功能:A:public void addFirst/addLast(E e):添加第一个/最后一个元素。
B:public E getFirst/getLast():获取第一个/最后一个元素。
C:public E removeFirst/removeLast():删除第一个/最后一个元素。
10泛型入门:(1)是一种把明确数据类型的工作推迟到创建对象或者调用方法的时候才去明确类型的特殊类型
(2)格式: <数据类型>:默认情况下,是Object类型。这里数据类型只能是引用类型。如果你看到写基
本类型也行,其实这里使用了自动装箱。
(3)好处:A:把运行时期问题提前到了编译时期
B:避免了强制类型转换
C:优化程序设计,解决了黄色警告线问题
(4)一般来说就是在集合中用的多。看API,如果类或者接口或者方法出现了<>说明这里就有泛型。
11.集合的三种遍历方式:1.for循环。2.迭代器。3.增强for。
package collectionpractice;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class StudentTest3 {
public static void main(String[] args) {
Student s1=new Student("a", 1);//创建学生类对象。
Student s2=new Student("b", 2);
Student s3=new Student("c", 3);
List<Student> l=new ArrayList<Student>();
l.add(s1);
l.add(s2);
l.add(s3);
Iterator<Student> i=l.iterator();//迭代器遍历
while (i.hasNext()) {
System.out.println(i.next());
}
System.out.println("----------------------");
for (Student s : l) {//增强for循环遍历
System.out.println(s);
}
System.out.println("----------------------");
for (int j = 0; j < l.size(); j++) {//for循环遍历
System.out.println(l.get(j));
}
}
}