java的集合类中collection类

1、什么是集合类
JDK中提供了一系列特殊的类,这些类可以存储任意类型的对象,并且长度可变,在Java中这些类被统称为集合
2、集合类分类
在这里插入图片描述下面是具体的类
一、collection类——所有单列集合的父接口,里面定义了set和list的一些通用方法,常用的如下:
在这里插入图片描述1.1 list类——抽象类
特点:1、元素可重复性
2、元素存储是线性的,所以元素是先进先出
3、数据是单列的
在这里插入图片描述list的实现类——LinkedList
在这里插入图片描述1.2 set 类
特点:1.元素不可以重复
2.元素存储顺序按照一定规则来分布(哈希值%长度)
3.数据是单列的

HashSet集合之所以能确保不出现重复的元素,是因为它在存入元素时做了很多工作。当调用HashSet集合的add()方法存入元素时,首先调用当前存入对象****的hashCode()方法获得对象的哈希值,然后根据对象的哈希值计算出一个存储位置。如果该位置上没有元素,则直接将元素存入,如果该位置上有元素存在,则会调用equals()方法让当前存入的元素依次和该位置上的元素进行比较,如果返回的结果为false就将该元素存入集合,返回的结果为true则说明有重复元素,就将该元素舍弃

package cn.csdn.hashset;
/**
 * 模拟HashSet不重复存储的原理
 */
import java.util.HashSet;

/*
 * 这里自定义一个学生类
 */

class Student{
	String name;
	String id;
	
	//定义一个构造方法,方便初始化
	public Student(String name,String id) {
		this.name=name;
		this.id=id;
	}
	
	//重写ToString方法,方便看数据
	public String toString() {
		return id + ":"+ name;
	}
	
}

public class HashSetDemo {
	public static void main(String[] args) {
		//实例化一个对象
		HashSet hs =new HashSet();
		
		//增加student对象
		Student stu1=new Student("jack","01");
		Student stu2=new Student("roce","02");
		Student stu3=new Student("demo","03");
		Student stu4=new Student("jack","01");
		hs.add(stu1);
		hs.add(stu2);
		hs.add(stu3);
		hs.add(stu4);
		
		System.out.println(hs);

	}
}

在这里插入图片描述
在这个代码中我们会发现:这里出现了重复的,但是却没有pass掉,为什么呢?
因为在我们在实例化这样student对象的时候,其实计算机给两个“jack”分配了不同的空间,他们的hashcode是不一样的,所以就会认为他是不一样的元素;

下面我们来重写一下这个student类方法,达到删除相同元素的功能

package cn.csdn.hashset;
/**
 * 模拟HashSet不重复存储的原理
 */
import java.util.HashSet;

/*
 * 这里自定义一个学生类
 */

class Student{
	String name;
	String id;
	
	//定义一个构造方法,方便初始化
	public Student(String name,String id) {
		this.name=name;
		this.id=id;
	}
	
	//重写ToString方法,方便看数据
	public String toString() {
		return id + ":"+ name;
	}
	
	//重写hashcode码方法-如果id相同就是相同元素,就返回id
	public int hashCode() {
		return id.hashCode();
	}
	
	
	//重写一个equal方法
	public boolean equals(Object obj) {
		//判断是否为Student类型数据
		//如果是同一个对象,就返回true
		if(this==obj)//这里的this其实就是当前对象耳朵引用
			return true;
		
		//如果不是一种类型的数据,返回false
		if(!(obj instanceof Student))
			return false;
		
		//如果是同一种数据
		Student stu=(Student)obj;//强制类型转换
		boolean b = this.id.equals(stu.id);
		return b;

	}
	
}

public class HashSetDemo {
	public static void main(String[] args) {
		//实例化一个对象
		HashSet hs =new HashSet();
		
		//增加student对象
		Student stu1=new Student("jack","01");
		Student stu2=new Student("roce","02");
		Student stu3=new Student("demo","03");
		Student stu4=new Student("jack","01");
		hs.add(stu1);
		hs.add(stu2);
		hs.add(stu3);
		hs.add(stu4);
		
		System.out.println(hs);
		
		
		
	}
}

在这里插入图片描述
collection类的一个特殊的遍历方法——迭代器(iterator)和加强for循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值