集合进阶

1.Collection

1.1.集合的特点

        提供一种存储空间可变的存储模型,存儲的数据容量可以时发生改变

1.2.结构

1.3.Collection集合概述和使用

单列接口,不能直接实现,用子接口(Set和List)实现

 1.4.Collection集合的常用方法

1.5.Collection集合的遍历

1.Itertor:迭代器

Iterator<E> iterator():返回此集合中元素的迭代器,通过集合的 iterator( )方法得到

2.Itertor迭代器while循环改进

2.List

2.1.List集合概述和特点

概述

有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置

用户可以通过整数索引访问元素, 并搜索列表中的元素 与Set集合不同,列表通常允许重复的元素

特点:

有序:存储和取出的元素顺序一致

可重复:存储的元素可以重复

2.2.List集合的特有方法 

特有方法:

 for循环改进遍历:

 2.3.列表迭代器

常用方法:

 代码演示:

 与Collection迭代器差不多

2.4.List集合子类特点

1.区别

ArrayList:底层数据结构是数组(查询快,增删慢)

LinkedList:底层数据结构是链表(查询慢,增删快)

2.LinkedList集合特有功能

3.Set

3.1.Set集合概述和特点

1.元素存取无序

2.没有索引,不能用普通for循环进行遍历操作

3.不能存储重复元素

3.2.哈希值

定义:

 是JDK根据对象的地址或字符串或数字计算出来的一串int类型的数值

如何得到哈希值:

如何得到哈希值:hashcode( )

例子:

重写实现不同对象的哈希值相同

3.3.HashSet集合概述和特点

特点:

底层数据结构是哈希表

●对集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素顺序—致

没有带索引的方法,所以不能使用普通for循环遍历

●由于是Set集合,所以是不包含重复元素的集合

遍历:

3.4.哈希表

●JDK8之前,底层采用数组+链表实现,可以说是一个元素为链表的数组

●DK8以后,在长度比较长的时候,底层实现了优化

 案例:HashSet遍历

 

 重写:hashCode和equals方法

3.5.LinkedHashSet集合和特点

概述

哈希表和链表实现的set接口,具有可预测的迭代次序(存储和迭代数据的次数一致)

集合特点:

1.哈希表和链表实现的Se接口,具有可预测的迭代次序(链表)

2.由链表保证元素有序,也就是说元素的存储和取出顺序是一致

3.由哈希表保证元素唯一,也就是说没有重复的元素

遍历(增强for)

3.6.TreeSet集合概述和特点

概述: 

是一个有序的集合,它的作用是提供有序的Set集合

特点:

1.元素有序,这里的顺序不是指存储和取出的顺序,而是按照指定的规则进行排序,具体排序方式取决于构造方法 

TreeSet( ):根据其元素的自然排序进行排序 ​ TreeSet( comparator comparato):根据指定的比较器进行排序

​2.没有带索引的方法,所以不能使用普通for循环遍历

3.由于是Set集合,所以不包含重复元素的集合                

3.7.自然排序Comparable的使用

过程:

1.存储学生对象并遍历,创建 TreeSe堞集合使用无参构造方法

2.要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序

 

3.8.比较器排序 Comparator的使用

package Demo;

import java.util.Comparator;
import java.util.TreeSet;

public class Demo6 {
    public static void main(String[] args) {
        TreeSet<Student> students=new TreeSet<Student>(new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                int num = s1.getAge() - s2.getAge();
                int num2=num==0?s1.getName().compareTo(s2.getName()):num;
                return num2;
            }
        });
        //创建学生对象
        Student s1=new Student(29,"xishi");
        Student s2=new Student(28,"wangzhaojun");
        Student s3=new Student(33,"yangyuhuan");
        Student s4=new Student(33,"linqingxia");
        Student s5=new Student(33,"linqingxia");
        students.add(s1);
        students.add(s2);
        students.add(s3);
        students.add(s4);
        students.add(s5);
        for (Student s:students){
            System.out.println(s.getAge()+","+s.getName());
        }

    }
}
class Student{
    private int age;
    private String name;

    public Student(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;
    }
}

4.泛型

4.1.泛型概述:

 好处:

1.把运行时期问题提前到了编译期间

2.避免强制类型转换

4.2.泛型类

格式:修饰符cass类名<类型>{ } ​ 范例: public class Generic<T>{ }

​此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型

 4.3.泛型方法

4.4.类通配符

4.5.可变参数

 4.6.可变参数的使用

5.Map

5.1.Map集合的概述和使用

概述

Interface Map<K,V> K:键的类型;V:值的类型 ​

将键映射到值的对象;不能包含重复的键;每个键可以映射到最多—个值

5.2.Map集合的基本功能 

 5.3.Map集合的获取方法

 5.4.Map集合遍历

 

6.Collections 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值