详解 Java Collection集合

集合的继承体系

集合继承体系

##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判断认为是同一个元素。
}
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值