详解Collection集合体系

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. 栈和队列
   栈:先进后出(子弹夹,杯子)
   队列:先进先出(排队,管子)
2. 数组结构(ArrayList底层结构)
    查询快,增删慢
3. 链表结构(LinkedList底层结构)
   查询慢,增删快
4. 红黑树结构(HashSet底层结构)
   查询速度很快

List集合

List特有方法

List集合时有索引的,所有它的特有方法都和索引相关

public add(int index,E e)
  添加元素到指定索引位置
public E remove(int index)
  删除指定索引位置的元素
public E set(int index,E e)
  修改指定索引位置的元素
public E get(int index)
  获取指定索引位置的元素

List练习

把一个集合中最后一个元素置顶

ArrayList<String> list=new ArrayList<>();
list.add("hello");
list.add("world");
list.add("java");
list.add("javaee");
//把一个集合中最后一个元素置顶
//移除最后一个元素,并返回
String e=list.remove(list.size()-1);
//把被移除的元素,添加到0索引位置
list.add(0,e);

LinkedList特有方法

LinkedList底层数据结构是链表结构,相对于List接口而言,多了一些对集合头部(first)尾部(last)进行操作的方法

public void addFirst() 在集合的头部添加元素
public void addLast()   在集合的尾部添加元素
public void push()     往集合的头部添加元素(模拟压栈)
public E removeFirst() 移除第一个元素
public E removeLast()  移除最后一个元素
public E pop()       移除集合中的一个元素(模拟弹栈)
public E getFirst()  获取第一个元素
public E getLast()   获取最后一个元素

Set集合

###HashSet集合
HashSet集合底层数据结构是 哈希表,它能保证元素的唯一性

往HashSet集合中存储元素时,先计算元素的hashCode是否存在,如果已经存在,继续用equals方法判断元素是否和集合中已有元素相同。只有hashCode和equals比较之后都相同,才认为元素重复。否则不认为元素重复
在这里插入图片描述

上图是HashSet的底层原理,简单了解即可不用深入研究。
HashSet集合中存储自定义元素时,保证元素唯一性的方式是,复写元素的hashCode方法和equals方法
IDEA快捷键:alt+insert自动生成即可。

LinkedHashSet集合

LinkedHashSet是HashSet集合的子类,它既能保证元素有序,也能保证元素唯一。
保证元素唯一的方式和HashSet是一样的,也需要复写元素的hashCode和euqals方法

代码演示

定义Student类,复写hashCode和equals方法(快捷键: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);
    }
}

测试类,演示HashSet和LinkedList的区别

public class Demo{
    public static void main(String[] args) {
        HashSet<Student> set=new HashSet<>();
        set.add(new Student("李四", 18));
        set.add(new Student("张三", 20));
        set.add(new Student("王五", 30));
        set.add(new Student("王五", 30));
        for (Student stu : set) {
            System.out.println(stu);
        }

        System.out.println("-----------------");

        LinkedHashSet<Student> set2=new LinkedHashSet<>();
        set2.add(new Student("李四", 18));
        set2.add(new Student("张三", 20));
        set2.add(new Student("王五", 30));
        set2.add(new Student("王五", 30));
        for (Student stu : set2) {
            System.out.println(stu);
        }
    }
}

结果如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gXmZjJ46-1591089135606)(assets/markdown-img-paste-20180901182621207.png)]在这里插入图片描述

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MyBatis中,association和collection是resultMap属性中用于定义关联对象和集合对象映射规则的元素。 1. association:用于定义关联对象的映射规则。它可以在一个resultMap中嵌套另一个resultMap,以实现对象之间的关联映射。常见的应用场景是一对一的关联关系。 association元素可以包含以下属性: - property:指定关联对象在Java对象中的属性名。 - column:指定关联字段在数据库中的列名。 - resultMap:指定关联对象的resultMap,用于定义关联对象的映射规则。 示例: ```xml <resultMap id="userResultMap" type="User"> <id property="id" column="user_id"/> <result property="username" column="username"/> <association property="role" resultMap="roleResultMap"/> </resultMap> ``` 2. collection:用于定义集合对象的映射规则。它可以将查询结果中的多行数据映射为一个集合对象,常见的应用场景是一对多的关联关系。 collection元素可以包含以下属性: - property:指定集合对象在Java对象中的属性名。 - ofType:指定集合元素的类型。 - column:指定关联字段在数据库中的列名。 - resultMap:指定集合元素的resultMap,用于定义集合元素的映射规则。 示例: ```xml <resultMap id="orderResultMap" type="Order"> <id property="id" column="order_id"/> <result property="orderNo" column="order_no"/> <collection property="items" ofType="OrderItem" resultMap="orderItemResultMap"/> </resultMap> ``` 通过使用association和collection元素,我们可以定义复杂的对象关系映射,使查询结果能够直接转换为Java对象及其关联对象或集合对象。这样可以方便地进行对象间的关联查询和数据封装。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值