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循环