java集合体系

目录

 

集合:(集合会自动扩容)

        Collection(单列)

        Map(双列)

小结:

Collection集合概述和使用

Collection集合概述:

Collection集合常用方法

Collection集合的遍历

增强for循环

三种循环的使用场景

list集合概述和特点

List集合概述

List集合特点

List集合特有方法

List集合常用实现类

LinkedList集合特有功能

泛型概述

泛型可以使用的地方:

泛型类的总结

泛型的定义格式:

泛型类

泛型方法

泛型接口

类型通配符

Set集合概述和特点

TreeSet集合概述和特点

        自然排序Comparable的使用

         比较器排序Compartor的使用

Hashset集合

哈希值:

常见数据结构哈希表

set集合小结:

 Map集合概述和使用

Map集合的基本功能

 Map集合的获取功能

 HashMap的特点

TreeMap的特点


集合:(集合会自动扩容)

        Collection(单列)

                List(可重复):ArrayList,LinkedList

                Set(不可重复):HashSet,TreeSet

        Map(双列)

                HashMap,TreeMatp

Collection,List,Set,Map:是接口

ArrayList,LinkedList,HashSet,TreeSet,HashMap,TreeMatp:是实现类

小结:

        1,数组的长度是不可变的,集合的长度是可变的。

        2,数组可以存储基本数据类型和引用数据类型

             集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类。

Collection集合概述和使用

Collection集合概述:

        Collection是单列集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素

        JDK不提供此接口的任何直接实现,它提供更具体的子接口(Set和List)实现

船舰Collection集合的对象

        多态的方式

        具体的实现类ArrayList

Collection集合常用方法

方法名说明
boolean add(E e);添加元素
boolean remove(Object o);从集合中移除指定的元素
boolean removeif(Object o);根据条件进行删除
void clear();清空集合
boolean contains(Object o);判断集合中是否存在指定的元素
boolean isEmpty();判断集合是否为空
int size();集合的长度,也就是集合中元素的个数

            boolean removeif(Object 0 ) 根据条件进行删除

               removeif底层会遍历集合,得到集合中的每一个元素

                s依次表示集合中的每一个元素

                就会把者每一个元素都到lambda表达式中判断一下

                如果返回是true,则删除

                如果返回是false,则保留不删除

Collection<String> collection = new ArrayList<>();
collection.removeIf(
    (String s)->{
        return s.length() == 3;
     }
);

Collection集合的遍历

        Iterator :迭代器,集合的专用遍历方式

        Iterator<E> iterator(); 返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引。

        Iterator中的常用方法

                Iterator<E> iterator();创建迭代器对象,默认指向当前集合的0索引

                  boolean hasNext();判断当前位置是否有元素可以被取出

                  E next();获取当前位置的元素

                                        将迭代器对象移向下一个索引位置

增强for循环

        增强for:简化数组和collection集合的遍历

        它是JDK5以后出现的,其内部原理是一个Iterator迭代器

        实现Iterable接口的类才可以使用迭代器和增强for

增强for的格式:

        for(元素数据类型 变量名:数组或者collection集合){

                        //在此处使用变量即可,该变量就是元素

        }

ArrayList<String> list = new ArrayList<>();
for(String s:list){
    System.out.pringln(s);
}

//1,数据类型一定是集合或者数组中的元素类型

//2,s仅仅是一个变量名而已,在循环的过程中,依次表示集合或则数组中的每一个元素

//3,list就是要遍历的集合或者数组

三种循环的使用场景

如果需要操作索引,使用普通for循环

如果在遍历过程中需要删除元素,使用迭代器

如果仅仅是遍历,那么使用增强for

list集合概述和特点

List集合概述

        有序集合,这里的有序指的是存取顺序

        用户可以精确控制列表中每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素

List集合特点

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

        有索引:可以通过索引操作元素

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

List集合特有方法

        

方法名说明
void add(int index ,E element);在此集合中的指定位置插入指定的元素

E remove(int index);

删除指定索引处的元素,返回被删除的元素
E set(int index ,E element)修改指定索引处的元素,返回被修改的元素

E get(int index)  ;

返回指定索引处的元素

添加元素后,原来位置上的元素往后挪一个索引

List集合中有两个remove方法:

        第一个:删除指定的元素,返回值表示当前元素是否删除成功

        第二个:删除指定索引的元素,返回值表示实际删除的元素

List集合常用实现类

List集合常用子类

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

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

LinkedList集合特有功能

方法名说明
public void addFirst(E e );在该列表开头插入指定的元素
public void addLast(E e);将指定的元素追加到此列表的末尾
public E getFirst();返回此列表中的第一个元素
public E getLast();返回此列表中的最后一个元素
public E removeFirst();从此列表中删除并返回第一个元素
public E removeLast();从此列表中删除并返回最后一个元素

泛型概述

        泛型:是JDK5中引入的特性,它提供了编译时类型安全检测机制

泛型的好处:

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

        避免了强制类型转换

泛型可以使用的地方:

        类后面----->泛型类

        方法申名后面--->泛型方法

        接口后面----->泛型接口

泛型类的总结

        如果一个类的后面有<E> ,表示这个类是一个泛型类

       创建泛型类的对象时,必须要给这个泛型确定具体的数据类型

泛型的定义格式:

        <类型>:指定一种类型的格式。

                        尖括号里面可以任意书写,按照变量的定义规则即可,一般只写一个字母。

                        比如:<E>,<T>,<Q>,<M>

        <类型1,类型2....>:指定多种类型的格式,多种类型之间用逗号隔开

                        比如:<E,T>,<Q,M>,<K,V>

泛型类

        泛型类的定义格式:

        格式:修饰符class类名<类型>{}

        范例:public class Generic<T>{}

泛型方法

        泛型方法的定义格式:

        格式:修饰符<类型> 返回值类型方法名(类型,变量名){}

        范例:public <T> void show(T t){}

泛型接口

        泛型接口的使用方式:

        实现类也不给泛型

        实现类确定具体的数据类型

        泛型接口的定义格式:

        格式:修饰符 interface 接口名<类型>{}

        范例:public interface Generic<T>{}

类型通配符

        类型通配符:<?>

        ArrayList<?>:表示元素类型未知的ArrayList,它的元素可以匹配任何的类型

        但是并不能把元素添加到ArrayList中了,获取出来的也是父类(Object)类型

        类型通配符上限:<? extends 类型>

                        ArrayList <? extends Number>:它表示的类型是Number或者其子类型

        类型通配符上限:<? super 类型>

                        ArrayList<? super Number>:它表示的类型是Number或者其父类型

Set集合概述和特点

        set集合特点

                可以去除重复

                存取顺序不一致

                没有带索引的方法,所以不能使用普通for循环遍历,也不能通过索引来获取,删除set集合里面的元素。

TreeSet集合概述和特点

        TreeSet集合特点

        不包含重复元素集合

        没有带索引的方法

        可以将元素按照规则进行排序(想要使用TreeSet需要制定排序规则)

        自然排序Comparable的使用

                使用空参构造创建TreeSet集合

                自定义的Student类实现Comparable接口

                重写里面的compareTo方法

        自然排序简单原理

                1,如果返回值为负数,表示当前存入的元素是较小值,存左边

                2,如果返回值是0,表示当前存入的元素跟集合中元素重复了,不存

                3,如果返回值为正数,表示当前存入的元素是较大值,存右边

重写compareTo方法

         比较器排序Compartor的使用

                TreeSet的带参数构造方法使用的是比较器排序对元素进行排序的

                比较器排序,就是让集合构造方法接收Comparator的实现类对象,重写compar(T O1,T O2)方法

                重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写

         两种方法总结:

                1,自然排序:自定义实现Comparable接口,重写compareTo方法,根据返回值进行排序

                2,比较器排序:创建TreeSet对象的时候传递Comparator的实现类对象,重写compare方法根据返回值进行排序

                3,在使用的时候,默认使用自然排序,当自然排序不满足现在的需求时,使用比较器排序

Hashset集合

        hash集合特点:

                底层数据结构是哈希表

                不能保证存储和去除的顺序一致

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

                由于是set集合,所以元素唯一

哈希值:

        哈希值:是jdk根据对象的地址或者属性值,算出来的int类型的整数

Object类中有一个方法可以获取对象的哈希值

        public int hashCode();根据对象的地址值计算出来的哈希值

我们可以对Object类中的Hashcode方法进行重写,在重写之后,就一般是根据属性值来计算哈希值的。此时跟对象的地址值就没有任何关系

常见数据结构哈希表

哈希表

        JDK8之前,底层采用数组+链表实现

                数组的长度默认为16,加载因子为0.75,

                首先会先获取元素的哈希值,计算出在数字中应存入的索引

                        判断索引处是否为null

                        如果时null,直接添加

                        如果不是null,则于链表中的所有元素通过equals放法比较属性值有一个相同,                                就不存,如果都不一样,才会存入集合。

         JDK8以后,由数组+链表+红黑树实现

                当在下面的元素过多,那么不利于添加,也不利于查询,所以在JDK8以后,

                当量表长度超过8的时候,自动转换为红黑树

                存储过程:1,计算元素的哈希值

                                  2,计算应存入的索引值

                                   3,判断是否为空

                                                如果为空:直接存,不为空判断结构:链表或者红黑树

set集合小结:

        

 Map集合概述和使用

        Map集合是双列集合,一对数据是由键值对组成的,键不能重复,值可以重复

        键和值是一一对应的关系,每一个键只能找到自己对应的值

        (键+值)这个整体,通常称为键值对或者键值对对象,java中叫做“Entry对象”

Map集合的基本功能

 Map集合的获取功能

1,

        

通过keyset获取键值并存入set集合中,再通过get方法和set集合中的键值获取值。

 

2,                         先通过entrySet方法获取所有键值对对象的集合,再通过getKey(),getValue()获取键值。                                                              

 HashMap的特点

        HashMap是Map里面的一个实现类

        直接使用Map里面的方法就可以

        HashMap跟HashSet一样底层是哈希表结构的

        依赖hashCode方法和equals方法保证键的唯一

        如果存储的是自定义对象,需要重写hashCode方法和equals方法

TreeMap的特点

        TreeMap是Map里面的一个实现类

        直接使用Map里面的方法就可以

        TreeMap跟TreeSet一样地层是是红黑树结构的

        依赖自然排序或者比较器排序,对键进行排序

        如果键存储的是自定义对象,需要实现Comparable接口或者再创建TreeMap对象时候给出比较器排序的规则

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值