集合的认识

集合:

Collection(接口)大爹:

单列集合,他有两个重要的接口,List接口和Set接口

  • List :有索引、存取有序、可重复。
  • Set :无索引、存取无序(LinkedHashSet除外)、不重复。

请添加图片描述
Collection方法: 当遇到共性的方法时(因为其实现类俩接口SetList,他会尊重最低的要求,比如 删除 它不能根据索引删除,因为Set无索引
在这里插入图片描述
在这里插入图片描述

其中比较特殊的方法:

1、contains(Object o)

contains(Object o) :
如果此列表包含指定的元素,则返回 true 。
注意:当需要判断自定义对象是否包含于集合中时,需要在自定义方法中重写equals()方法,contains()方法本质是调用equals()方法进行判断

举例说明:

自定义一个类,并且重写equals方法,在里面添加一句 equals方法已被调用。。。

import java.util.Objects;

public class T {
    private int age;
    private String name;
    public T(int age,String name){
        this.age=age;
        this.name=name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        System.out.println("equals方法已被调用。。。");
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        T t = (T) o;
        return age == t.age && Objects.equals(name, t.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(age, name);
    }
}

定义一个测试类:

import java.util.ArrayList;
import java.util.Collection;


public class Test1 {
    public static void main(String[] args) {
        Collection c1=new ArrayList();
        c1.add(123);
        c1.add(321);
        c1.add(new String ("引用类型"));
        T tt=new T(19,"净澄");
        c1.add(tt);

        System.out.println(c1.contains(new T(19, "净澄")));
    }
}

结果:

equals方法已被调用。。。
equals方法已被调用。。。
equals方法已被调用。。。
equals方法已被调用。。。
true

Process finished with exit code 0

分析结果:
为什么判断new T(19, "净澄")是否包含于c1集合时,equals方法已被调用。。。会被执行四次?
因为ArraryList是有序的,所以会先从第一个位置的数据进行判断,上面需要判断的对象是第四个,所以需要判断四次
因此添加自定义类在对象中时,必须要再在自定义类中重写equals方法

重点黑马新学(接上面):如果存入的是自定义对象,那么就需要重写equals(),在上面的代码中发现先存进去了一个对象tt,然后再将集合与一个一摸一样的tt进行比较,如果没有重写equals()那么将返回false,因为contains方法中的equals()是比较地址值,(用快捷键alt+insert自动出来的equals()方法是对比属性值,就不是地址值了)

迭代器(Iterator):
  • Collection接口实现了Iterator接口
  • 迭代器中有类模板,类似于指针,遍历完数据后,就指向了最后一个位置
  • 集合将集合中的元素值给迭代器,而不是将元素直接给迭代器,因此,在迭代器中不可以进行集合的操作,但是可以用迭代器特有的remove()方法对集合进行操作,就是能够对迭代器外的集合(传入元素值的那个集合) 进行操作
  • 黑新: 1、迭代器不会复位,指针指向了最后一个那么就不会再回到最开始的位置,想要再遍历一次就需要重新获取迭代器
    2、在指针已经到了最后一位时,再强行调用.next()方法,就会报错
    3、迭代器不依赖索引,是创建指针再移动指针

在这里插入图片描述
使用迭代器遍历集合:黑新: hasNext():有元素返回true,否则…,
next():获得当前元素并且指针指向下一个;这俩打配合,就可以遍历出所有元素

//先创建一个ArrayList集合,在执行下面的方法
	Collection<String> c2=new ArrayList<>();
	c2.add("xixi");
	c2.add("haha");
 	Iterator iterator=c2.iterator();
        while (iterator.hasNext()){
            System.out.print(iterator.next()+"\t");
        }

结果:

123	321	引用类型	collection.T@a5bd2
集合对象 . toArray()和数组对象 . asList():

toArray():将集合转换为数组
as.List():将数组转换为集合

toArray():

将集合c2转换为数组arr,然后遍历

Object[] arr =c2.toArray();
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

as.List():

将数组转换为集合,但是要注意:集合不能存储基本数据类型,所以不能存储int,long等等基本数据类型

List<Integer> ob=Arrays.asList(new Integer[]{12,65});
        Iterator iterator1 =ob.iterator();
        while(iterator1.hasNext()){
            System.out.println(iterator1.next());
        }

List:

有一些特有的方法:
在这里插入图片描述

  1. add():会将指定位置上的元素往后挤一挤
  2. remove():参数为index s:输入指定索引返回删除的内容;参数为Object o:输入指定对象,返回是否删除成功
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值