Java学习第五天:泛型和容器

1.泛型(本质就是数据类型的参数化)

        <1.>作用:        

                Ⅰ.代码可读性更好(不要强制转换);

                Ⅱ.程序更加安全;

        <2.>要点:

                Ⅰ.把类型当作是参数一样传递;

                Ⅱ.<数据类型>只能是引用类型;

        <3.>定义泛型

泛型标记对应单词说明
EElement用于容器,表示容器中的元素
TType普通的Java类
KKey表示键,比如Map中的Key
VValue表示值
NNumber表示数值类型
?不确定的Java类型

        <4.>泛型类

                定义:public class Generic<T>{}

                使用:Generic<String> generic = new Generic<>();

        <5.>泛型接口

                定义:public interface Igeneric<T>{}

        <6.>泛型方法

                定义:public <T> void setName(T name){}

                           public <T> T getName(T name){}

        <7.>静态方法(无法访问类上定义的泛型)

                定义:public static <T> void setFlag(T flag){}

                           public static <T> T getFlag(T flag){}

        <8.>泛型方法与可变参数(泛型方法中,泛型也可以定义可变参数类型)

                定义:public <T> void method (T...args){}

        <9.>通配符与上下限定(“?”表示通配符)

                定义:public void showFlag(Generic<?> generic){}

                上限限定:(<Generic ? extends Number>)

                下限限定:不适用于泛型

        <10.>总结

                Ⅰ.基本类型不能用于泛型;

                Ⅱ.不能通过类型参数创建对象;

2.容器

        <1.>结构图

Collection接口
extendsextendsextendsextends

List接口(有序,可重复)               (动态数组)

Set接口(无序,不可重复)

               (集合)

Map接口

(函数)

interfaceinterfaceinterfaceinterfaceinterface
ArrayList类LingkedList类HashSet类LingkedHashSet类HashMap类

        <2.>单例集合(将数据一个一个的进行存储)和双例集合(键值对)

        <3.>ArrayList容器类(数组)

                Ⅰ.特点:底层是用数组实现的存储,查询效率高,增删效率低,线程不安全;

                Ⅱ.实例化容器

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

增加元素list.add("abc")
删除元素

list.remove(1)

修改元素list.set(0,"ad")
查询元素list.get(2)

                        注:更多方法参照jdk

        <4.>LinkedList容器类(双向链表)

                Ⅰ.实例化容器

                        List<String> list = new LinkedList<>();  

                        注:方法参照jdk

        <5.>HashSet容器类(集合)

                Ⅰ.特点:HashSet允许有null元素,查询和删除效率都比较高,线程不安全

                Ⅱ.实例化容器

                        Set<String> set = new HashSet<>()

                        注:方法参照jdk

        <6.>HashMap容器类

                Ⅰ.特点:查找、删除、修改方面都有非常高的效率

                        结构:jdk8以前:数组+链表;jdk8以后:数组+链表+红黑树,(在链表节点大于8                                    之后转化成红黑树,小于6转化为链表);

                Ⅱ.实例化容器

                        Map<String,String> map = new HashMap<>();

                Ⅲ.数组初始化

                        HashMap对于数组的初始化采用延迟初始化方式,通过resize方法实现初始化处                              理。resize方法既实现数组初始化,也实现数组扩容处理;

        <7.>迭代器(Iterator)(游标)

                方法:hasNext()当前位置是否有元素,

                           next()获取当前元素,并指向下一元素,                               

                           remove()删除当前位置的元素;

                Ⅰ.使用Iterator迭代List和Set接口容器

                        ①获取迭代器对象:Iterator<String> iterator = list.iterator();

                        ②while循环

while(iterator.hasNext()){
    String value = iterator.next();
    System.out.println(value);
}

                        ③.for循环

for(Iterator<String> it = list.iterator();it.hasNext;){
    String value = it.next();
    System.out.println(value);
}

             <8.> Collections工具类(提供了Set、List、Map接口的辅助方法,该类中所有方法为静态方法)        

方法描述
sort()对list容器升序排序
shuffle()对list容器随机排序
reverse()对liat容器进行逆序排序

fill(list,object)

用一个特定的对象重写整个list容器
binarySearch(list,object)折半查找特定对象

            

                                

               

               

               

     

        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值