学习笔记--单例集合

本文介绍了Java集合,它是存储对象的容器,长度可变,可存储任意类型对象。对比了集合和数组的区别,阐述了集合的创建方式、分类,如Collection下的List、Set,以及Map。还介绍了Collection接口的共性方法,最后说明了让集合存储对象及输出指定格式的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是集合

存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式。
集合的出现就是为了持有对象。集合中可以存储任意类型的对象, 而且长度可变。在程序中有可能无法预先知道需要多少个对象, 那么用数组来装对象的话, 长度不好定义, 而集合解决了这样的问题。

集合和数组的区别

数组和集合类都是容器
数组长度是固定的,集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象数组中存储数据类型是单一的,集合中可以存储任意类型的对象。
集合类的特点
用于存储对象,长度是可变的,可以存储不同类型的对象。
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);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值