集合的继承体系
##Collection的常用功能
1. 添加功能
boolean add(E e)
添加一个元素
boolean addAll(Collection c)
添加一批元素
2. 删除功能
boolean remove(Object o)
删除一个元素
3. 判断功能
boolean contains(Object o)
判断集合是否包含指定的元素
boolean isEmpty()
判断集合是否为空(集合中没有元素)
4. 获取功能
int size()
获取集合的长度
5. 转换功能
Object[] toArray()
把集合转换为数组
##遍历集合的方式
- 普通的for循环【必须要有索引,可以修改元素】
ArrayList<String> list=new ArrayList<>();
c.add("Hello");
c.add("Java");
c.add("World");
for(int i=0;ilist.size();i++){
String s=(String)list.get(i);
System.out.println(s);
}
- 迭代器遍历【任何集合都可以遍历,只能获取元素】
Collection<String> c=new ArrayList<String>();
c.add("Hello");
c.add("Java");
c.add("World");
//获取迭代器对象
Iterator<String> it=c.iterator();
//hasNext()判断是否有下一个元素,如果有就用next()获取
while(it.hasNext()){
//获取下一个元素
String s=it.next();
System.out.println(s);
}
- 高级for循环【就是迭代器的简化方式】
Collection<String> coll=new ArrayList<String>();
coll.add("Hello");
coll.add("Java");
coll.add("World");
//高级for遍历集合
for(Stirng s:coll){
System.out.println(s);
}
int[] arr={1,2,3,4,5,6};
//高级for遍历数组
for(int a:arr){
System.out.println(a);
}
##常见的数据结构
数据结构指的是数据的组存储方式,不同的数据结构有不同的特点。
1. 数组结构(ArrayList底层结构)
查询快,增删慢
1. 链表结构(LinkedList底层结构)
查询慢,增删快
2. 栈和队列
栈:先进后出(子弹夹,杯子)
队列:先进先出(排队,管子)
HashSet集合
HashSet集合底层数据结构是哈希表,它能保证元素的唯一性
上图是HashSet的底层原理,简单了解即可不用深入研究。
HashSet集合中存储自定义元素时,保证元素唯一性的方式是,复写元素的hashCode方法和equals方法
IDEA快捷键:alt+insert自动生成即可。
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return name+"..."+age;
}
//下面是复写的hashCode()和equals方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age &&
Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
public class HashSetDemo{
HashSet<Student> set=new HashSet<>();
set.add(Student("张三",20));
set.add(Student("李四",30));
set.add(Student("李四",30));//这个元素和上一个元素姓名和年龄相同,经过equals和hashCode判断认为是同一个元素。
}