什么是集合
存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式。
集合的出现就是为了持有对象。集合中可以存储任意类型的对象, 而且长度可变。在程序中有可能无法预先知道需要多少个对象, 那么用数组来装对象的话, 长度不好定义, 而集合解决了这样的问题。
集合和数组的区别
数组和集合类都是容器
数组长度是固定的,集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象数组中存储数据类型是单一的,集合中可以存储任意类型的对象。
集合类的特点
用于存储对象,长度是可变的,可以存储不同类型的对象。
Object[] 数组可以储存任意类型数据但是一个数组只能储存一种类型而一个集合可以储存任意类型数据
集合的创建
通过多态调用Collection的子类从而调用Collection创建集合
Collection c = new ArrayList();//创建了了一个集合c,ArrayList是Collection 的一个子类
集和分类
—|Collection: 单列集合
—|List: 有存储顺序, 可重复
—|ArrayList: 数组实现, 查找快, 增删慢
由于是数组实现, 在增和删的时候会牵扯到数组
增容, 以及拷贝元素. 所以慢。数组是可以直接
按索引查找, 所以查找时较快
—|LinkedList: 链表实现, 增删快, 查找慢
由于链表实现, 增加时只要让前一个元素记住自
己就可以, 删除时让前一个元素记住后一个元
素, 后一个元素记住前一个元素. 这样的增删效
率较高但查询时需要一个一个的遍历, 所以效率
较低
—|Vector: 和ArrayList原理相同, 但线程安全, 效率略低
和ArrayList实现方式相同, 但考虑了线程安全问
题, 所以效率略低
—|Set: 无存储顺序, 不可重复
—|HashSet
—|TreeSet
—|LinkedHashSet
—| Map: 键值对
—|HashMap
—|TreeMap
—|HashTable
—|LinkedHashMap
Collection接口的共性方法
增加:
1:add() 将指定对象存储到容器中
add 方法的参数类型是Object 便于接收任意对象
2:addAll() 将指定集合中的元素添加到调用该方法和集合中
删除:
3:remove() 将指定的对象从集合中删除
4:removeAll() 将指定集合中的元素删除
修改
5:clear() 清空集合中的所有元素
判断
6:isEmpty() 判断集合是否为空
7:contains() 判断集合何中是否包含指定对象
8:containsAll() 判断集合中是否包含指定集合
使用equals()判断两个对象是否相等
获取: 9:int size() 返回集合容器的大小
转成数组10: toArray() 集合转换数组
使集合储存对象
package thread;//模拟用户登入注册界面
import java.util.*;
class user{
String name;
String id;
public user(String name,String id){
this.name=name;
this.id = id;
}
public boolean equals(Object obj) {
user p = (user)obj;
return this.name.equals(p.name)&&this.id.equals(p.id);
}
public String toString() {
return "{账号:"+this.name+" 密码:"+ this.id+"}";
}
}
public class thread05 {
static Collection c = new ArrayList();
public static void main(String[] args){
back();
}
public static void back(){
Scanner sc = new Scanner(System.in);
System.out.println(“注册:A 登陆:B”);
String choose = sc.nextLine();
if(“A”.equals(choose)){
register();
back();
}
if(“B”.equals(choose)){
In();
}
}
public static void register(){
Scanner sc = new Scanner(System.in);
System.out.println("请输入账号:");
String name = sc.nextLine();
System.out.println("请输入密码:");
String id = sc.nextLine();
c.add(new user(name,id));
System.out.println("注册成功!");
System.out.println(c);
}
public static void In(){
Scanner sc = new Scanner(System.in);
System.out.println("请输入账号:");
String name = sc.nextLine();
System.out.println("请输入密码:");
String id = sc.nextLine();
if(c.contains(new user(name,id))){
System.out.println("登陆成功!");
}
else{
System.out.println("登陆失败!");
}
}
}
c.add(new user(name,id));//将对象存入集合
在对象内部重写toString方法使集合能够指定格式输出(默认模式下输出对象及其地址)
public String toString() {
return "{账号:"+this.name+" 密码:"+ this.id+"}";
}
}
在对象内部重写equals方法,使contains()方法能够比较对象内容(默认比较对象地址)
public boolean equals(Object obj) {
user p = (user)obj;
return this.name.equals(p.name)&&this.id.equals(p.id);
}