Collection、泛型、List、Set、Collections

一、Collection

Collection是所有单列集合的父接口

集合和数组的区别

描述    
数组是一个容器可以存放同一种数据类型的多个元素可以存放基本数据类型也可以存放引用数据类型长度是固定的
集合是一个容器可以存放不同数据类型的多个元素(泛型 -> 存放相同数据类型)只能存放引用数据类型, 基本数据类型也可以直接存进去, 因为会自动装箱长度是可变的, 随着元素个数的变化而变化

 


1. 单列集合的继承体系

 


2. Collection 常用功能

Collection是所有单列集合的父接口,因此在Collection中定义了单列集合(List,Set)通用的一些方法.

  • public boolean add(E e)   把指定对象添加到集合中
  • public void clear( )  清空所有元素,集合长度变为0
  • public boolean remove(E e)  删除指定元素
  • public boolean contains(E e)   判断是否包含指定对象
  • public boolean isEmpty( )   判断当前集合是否为空
  • public int size( )    返回集合中元素的个数
  • public Object[] toArray( )  将集合转化为数组

 


3. Iterator 迭代器

 3.1 Iterator 接口

 Iterator 主要用于迭代访问(即遍历) Collection 中的元素,   因此 Iterator 对象也被成为 迭代器

迭代的概念

在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代 。

Iterator<E> iterator() : 获取指定集合对应的迭代器对象

Iterator接口的常用方法:

  • public E next():返回迭代的下一个元素。

  • public boolean hasNext():如果仍有元素可以迭代,则返回 true。

实例

Collection<String> c = new ArrayList<>();
        c.add("梅西");
        c.add("武磊");
        c.add("德布劳内");
        c.add("托雷斯");


        // iterator() : 获取了集合对应的迭代器对象
        Iterator<String> it = c.iterator();
        // 判断集合中是否还有下一个元素
        while (it.hasNext()) {
            // 获取元素
            String s = it.next();
            System.out.println(s);
        }

 


二、泛型

ArrayList<String> list = new ArrayList<>();
// 泛型的作用: 用来限定容器中元素的数据类型, 泛型中只能是引用数据类型

1. 泛型的好处

  1. 将问题从运行时期转换到编译时期

  2. 省去了强转的麻烦

2. 泛型类, 泛型方法, 泛型接口

  • 泛型类: 在创建该类对象的时候, 确定具体的数据类型.

  • 泛型方法: 在调用该方法的时候, 确定具体的数据类型.

  • 泛型接口:

    • 子类实现接口, 直接确定具体的数据类型.

    • 子类实现接口, 不确定具体的类型, 等到创建子类对象时, 确定具体的数据类型.

3. 固定泛型边界

  • ? extends E:固定泛型的上边界. 传入集合的泛型可以是E, 也可以是E的子类.

  • ? super E :固定泛型的下边界. 传入集合的泛型可以是E, 也可以是E的父类.

4. 泛型的定义与使用

  • 定义和使用含有泛型的类
修饰符 class 类名<代表泛型的变量>{

}

/*  class ArrayList<E> {
    
    public boolean add(E e){

    }

    public E get (int index){

    }
}

*/
  • 在创建对象的时候确定泛型

ArrayList<String> list = new ArrayList<String>( );
ArrayList<Integer> list = new ArrayList<Integer>( );

public class Demo<Person>{

    //没有Person类型,在这里代表 未知的一种数据类型 未来传递什么就是什么类型

    private Person student;
    
    public void setStudent(Person student){
    
        this.student = student;
    }

    public Person getstudent( ){
        return student;
    }

}

使用

public class Test{

    public static void main(String[] args){
        //创建String泛型类
        Demo<String> d1 =  new Demo<>();
        //调用setStudent方法
        d1.setStudent("三好学生");  
        // 调用getSudent方法
        String student1 = d1.getStudent();
        System.out.println(student1);
        

        //创建Integer泛型类
        Demo<Integer> d2 =  new Demo<>();
        d1.setStudent(123);  
        int student2 = d1.getStudent();
        System.out.println(student2);    
    }

}
  • 含有泛型的方法

修饰符 <代表泛型的变量> 返回值类型 方法名(参数){  

}

  • 含有泛型的接口

修饰符 interface接口名<代表泛型的变量> {

 }

 


三、List集合

  1.List集合的特点

  • 有序:存入元素和去除元素的顺序是相同的

  • 有索引

  • 可以重复: 可以存储相同的元素

  2.List接口中常用方法

List作为Collection集合的子接口,不但继承了其中全部方法,还增加了一些根据元素索引来操作的特有方法

  • public void add(int index,E element)   将指定元素,添加到集合中指定的位置上
  • public E get(int index)  返回集合中指定位置的元素
  • public E remove (int index)  移除列表中指定位置的元素,返回的是被移除的元素
  • public E set(int index,E element)     用指定元素替换集合中指定位置的元素,返回值是更新前的元素

 

  3. ArrayList集合

  ArrayList  集合数据存储的结构是数组结构.  元素增删慢,查找快,适合查询数据,遍历数据

  4. LinkedList集合

LinkedList 集合数据存储的结构是链表结构。方便元素添加、删除的集合。

  • public void addFirst(E e)  
  • public void addLast(E e)
  • public E getFirst( )
  • public E getLast( )
  • public E removeFirst( )
  • public E removeLast( )
  • public E pop( )                    从此列表所表示的堆栈处弹出一个元素。
  • public void push(E e)          将元素推入此列表所表示的堆栈。
  • public boolean isEmpty( )    如果列表不包含元素,则返回true

 


 

四、Set集合

 1.Set集合的特点

  • 无序:存入元素和去除元素的顺序是相同的

  • 无索引

  • 不可以重复: 保证元素的唯一

  2.HashSet集合介绍

    HashSet是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能。保证元素唯一性的方式依赖于: hashCode  与  equals  方法。

  3.HashSet存储自定义类型元素

   给HashSet中存放自定义类型元素时,需要重写对象中的hashCode 和 equals 方法,建立自己的比较方式,才能保证HashSet集合中的对象唯一

   3.1 LinkdeHashSet集合介绍

  LinkedHashSet 是链表和哈希表组合的一个数据存储结构

  特点

  • 能够保证元素的唯一

  • 有序

  4.TreeSet(扩展)

  • TreeSet的底层是二叉树

   特点

  • 保证元素唯一

  • 排序


五、Collections

  1.可变参数

修饰符  返回值类型 方法名(数据类型 ... 变量名) {
    
}

  2.常用功能

  • public static <T> boolean addAll(Collection<T> c, T... elements) 将可变参数中的内容,都添加到c集合中
  • public static void shuffle(List <?>  list)  打乱集合中的元素
  • public static <T> void sort (List<T> list)  按升序排列
  • public static <T> void sort (List<T> list, Comparator<? super T> )    按指定规则排序

   3. Comparator比较器

Java已经提供的类(String,Integer,Double)中,都具备自然排序的功能

    Integer自然排序:

return (x < y) ? -1 : ((x == y) ? 0 : 1);

    比较器排序

ArrayList<Integer> list = new ArrayList<>();

        Collections.addAll(list, 1, 5, 2, 3, 4);
        // 方法的参数列表是接口, 那么实际传入的是该接口的实现类对象
        // new 接口名() {} : 实现了该接口的实现类对象
        Collections.sort(list, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                // 升序的逻辑
                // 如果o1小于o2, 放在左边, 返回负数
                // 如果o1大于o2, 放在右边, 返回正数
                // 如果o1等于o2, 返回0
                // return o1 - o2;


                // 降序的逻辑
                // 如果o1小于o2, 放在右边, 返回正数
                // 如果o1大于o2, 放在左边, 返回负数
                // 如果o1等于o2, 返回0
                return o2 - o1;
            }
        });

        System.out.println(list);

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值