------- android培训、java培训、期待与您交流! --------------------------------
集合框架
1. 为什么要使用集合,下面我们可以用一个例子来先熟悉一下
要求:有一个班级的学生,考试成绩,姓名,和学号
张三 100 90
李四 005 87
采用数组存储
对象数组 存储的是引用数据类型
class Student{
String name;
String id;
int score;
Student(name,id,score){
this.......
}
}
数组定义 Student[] student = {new Student("张三","004",88)};
数组的长度怎么办?
因此,Java在JDK1.2版本开始,出现了集合框架
集合也是容器,存储的
集合只存储对象,不存储基本数据类型,集合长度可变
集合和数组区别:
数组定长,集合变长
数组存储对象,基本类型
集合只存储对象
我们要学习集合容器:
既然是容器 如何将对象存储到集合中,将对象从集合中获取出来
存储对象到集合中,必须了解每个集合同期的特点
2. 集合框架的顶层接口Collection中的方法,学会查找API,记住常用方法,做到常用的不用查找就会写
2.1 add(Object e) 将对象存储到集合的方法
参数是Object类型,集合存储对象,存储什么对象不一定,可以自定义
2.2 addAll(Collection c)将一个集合存储到另一个集合
存储的是另一个集合中存储的对象
2.3 clear()清除集合中存储的所有对象
2.4 boolean contains(Object o)判断一个对象,是否存在于集合中
集合中是否包含这个对象
boolean containsAll(Collection c)判断一个集合,是否包含另一个集合
其实判断的是两个集合中存储的对象是否完全包含
2.5 int size()返回集合中存储对象的个数
比较记忆 数组.length属性
字符串.length()方法
集合.size()方法
2.6 boolean isEmpty()当集合中的元素的size()==0 结果返回真
2.7 boolean remove(Object o)移除集合中的一个对象,如果移除成功返回真
2.8 boolean removeAll(Collection c)移除两个集合中,相同的对象
2.9 boolean retainAll(Collection c)两个集合取交集
将coll和coll2两个集合中相同的对象,保存到coll中,不相同的就舍弃不要
boolean b = coll.retainAll(coll2);
返回值:调用者coll集合没有变化过,结果就是false
调用者coll发生了变化,就是true
3. 迭代器 很重要的环节
就是取出集合中存储对象的一种方式,遍历数组很像
iterator方法,写在了Collection接口中,所有的小弟都具备这个方法
Iterator iterator()
Iterator 接口,迭代器接口 iterator返回的是接口的实现类的对象
hasNext()判断集合中还有没有可以被取出对象,如果有就返回真
next()获取集合中存储的对象
ArrayList类的中的原始代码
Iterface Iterator{
public boolean hasNext();
public E next();
public void remove();
}
public class ArrayList{
public Iterator/*接口,返回的是接口的实现类对象*/ iterator(){
return new Itr();
}
private class Itr implements Iterator(){
public boolean hasNext(){}
public E next(){}
public void remove(){}
}
}
main(){
Iterator it = iterator();//获取到的就是 new Itr();
it.hasNext();
it.next();
}
使用迭代器取出集合中存储对象的步骤:
第一步,使用集合中的方法iterator()获取Iterator接口对象(内部类对象),获取迭代器
第二步,使用迭代器对象的hasNext()方法判断集合中,有没有对象可以被取出
第三步,使用迭代器对象的next()方法,获取集合中对象
使用迭代器的过程中,不能使用集合的方法修改集合中的元素,
否则会出现异常 java.util.ConcurrentModificationException--并发修改异常
在迭代器迭代集合的过程中,不能使用集合的方法,改变集合的长度 add remove clrea
当迭代器已经移动到了最后一位,再次使用next方法获取,出现
Exception in thread "main" java.util.NoSuchElementException--没有元素被取出异常
4. List派系
List是一个接口,是这个列表清单的顶层接口
凡是List集合中的所有小弟,特点:
存储到List集合中的对象,有序排列的 123 abc
存储的时候,和取出的时候顺序一致,存储的顺序相对取出的顺序相同,这样理解有序。
List集合允许存储重复对象
List集合存储的对象都有下标
List接口中的方法
4.1 void add(int index, E element) 在一个指定的位置上,插入一个对象
下标 插入的对象
4.2 Object get(int index)通过下标,获取指定下标上的元素
4.3 Object remove(int index)通过下标,移除指定的元素
返回的是,被删除的那个元素
4.4 Object set(int index, Object Element)修改指定位置上的元素
4.5 List subList(int fromIndex, int toIndex) 获取集合一部分,返回新集合
4.6 listIterator() 返回List特有迭代器对象
5. List派系的特有迭代器ListIterator接口
正向遍历集合,逆向遍历集合
遍历的过程中,可以修改集合,包括增加,删除
ListIterator接口
add、 set、 remove 是在遍历的过程中,修改集合的三个方法
逆向遍历的,前提是先正向便利一次集合,不常用
hasPrevious() == hasNext()
previous() == next()
6. ArrayList集合
有序,有下标,允许重复
ArrayList底层数据结构是可变数组结构
默认大小,10个位置 new ArrayList()10个位置
增长率 50%
ArrayList集合,是线程不安全的集合,执行效率高
ArrayList集合,查询速度快,增删速度慢
日后程序开发,一个项目中80%以上的功能是查询功能
增insert 删delete 改update 查select
案例,ArrayList存储自定义对象,并获取
7. 去掉ArrayList中的重复对象
老集合
ArrayList array = new ArrayList();
array.add("abc1")
array.add("abc2")
array.add("abc3")
array.add("abc2")
array.add("abc1")
请你去掉重复的元素
sop(array) 得到集合{abc1, abc2 ,abc3}
解决办法,建立一个新集合
迭代老集合
取出老集合中的元素,在新集合中,判断一下
判断老集合中的元素,在不在新集合中,如果不在,就存储到新集合
ArrayList集合中的一个方法contains("abc")
判断一个对象,是否包含在集合中
判定依据是,对象的equlas方法
8. Vector
类的名字不是以List结尾
Vecotor出现的时候,没有List接口
Vector类开始于JDK1.0版本
List接口,出现在JDK1.2版本,从JDK1.2版本开始,才有的集合框架的概念
Vector从1.2版本开始,改为实现List接口
在没有集合框架以前,Java程序依靠什么存储对象呢, Vector
Vector郁郁而终了
这个集合的底层数据结构,是可变数组结构
查询快,增删慢
Vector增长率100%
Vector集合线程安全的,执行效率低
因此,从1.2版本开始,ArrayList取代Vector
9. 集合存储对象的练习
/**
* 集合存储对象的练习 new Scanner(System.in).nextLine() 提示用户输入用户名: String name =
* sc.nextLine(); 输入密码 String password = sc.nextLine(); 将两个变量。,name
* password存储到集合中
*
* 用户的注册
*
* 登录 输入用户名: String name = sc.nextLine(); 输入密码 String password = sc.nextLine();
* 迭代集合,看看两个变量是否存在于集合中,如果存在,告知登录成功 否则登录失败
*
* 做这个案例需要三个类 main测试 集合操作类,专门操作集合,集合中存储的是用户对象 用户对象类,描述用户的
*/
import java.util.*;
public class ArrayListTest {
public static void main(String[] args) {
// 建立Scanner对象,实现用户输入
Scanner sc = new Scanner(System.in);
OperateArrayList oal = new OperateArrayList();
while (true) {
// 提示菜单:显示 1.注册 2.登录 其他则 退出
System.out.println("请选择选项,选择注册请输入1,选择登录请按2,退出请按其他:");
String string = sc.nextLine();
if ("1".equals(string)) {
// 提示用户输入账户名
System.out.println("请输入注册用户名:");
String name = sc.nextLine();
// 提示用户输入密码
System.out.println("请输入密码:");
String password = sc.nextLine();
// 注册结束后,将用户对象账户名和密码存入集合中
oal.regedit(name, password);
// 注册完成后提示
System.out.println("注册成功");
} else if ("2".equals(string)) {
// 提示输入用户名
System.out.println("请输入用户名");
String name = sc.nextLine();
// 提示输入密码
System.out.println("请输入密码");
String password = sc.nextLine();
// 判断用户名和密码是否正确
// 调用操作类的方法
if (oal.login(name, password)) {
System.out.println("登陆成功");
} else {
System.out.println("登录失败");
}
} else {
// 选择的是其他,直接退出
break;
}
}
}
}
ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------- 详细请查看:www.itheima.com
本文介绍了Java集合框架的基础知识,重点讲解了ArrayList的使用方法、特性及存储对象的练习案例,包括添加、获取、修改、删除等操作,并演示了如何在实际场景中应用ArrayList进行用户注册与登录功能的开发。
527

被折叠的 条评论
为什么被折叠?



