zoukankan      html  css  js  c++  java
  • 泛型和集合

    泛型:
    Generics 泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性。
    安全校验机制
    可以在类或者方法中预支的使用未知的类型。在JDK1.5之后引入的新特性
    让你在设计API时可以指定类或者方法支持泛型,这样我们使用API的时候也变得更为简洁,
    并且还得到了在程序编译时期的语法安全检查。
    将运行时期的ClassCastException,转移到编译时期变成了编译异常。
    也避免了类型强转的麻烦。
    使用:
    在集合中会大量使用到泛型。
    在开发中,泛型,用来灵活的将数据类型应用到不同的类、方法、接口当中。
    将数据类型作为参数进行传递。
    Collection.add(E e) 泛型的通配符 不是* 而是<?>
    List Set Map
    数据结构:
    数据存储的常用结构:栈、队列、链表、红黑树
    栈:
    stack,又称为堆栈,它是运算受限的线性表,它的限制主要体现在仅允许在标的的一端进行插入和删除操作,
    不允许在其他任何位置进行添加、查找、删除等操作。
    它的存取有以下几个特点:
    1.先进后出(存进去的元素,要在它的后面的元素依次取出后才能去除该元素)。
    2.栈的入口、出口都在栈的最顶端位置。

    有两个名词需要注意:
    压栈:就是存元素,即是把元素存储到栈的最顶端,栈中已有的元素依次向栈底方向移动一个位置。
    弹栈:就是取元素。即是把栈的最顶端位置元素取出,栈中已有元素依次向栈顶方向移动一个位置。

    队列:
    queue,简称队,它和堆栈是一样的,也是一种运算受限的线性表,它的限制是仅允许在标的一端进行插入,而在
    标的另一端进行删除。
    它的存取有以下特点:
    1.先进先出(即,存进去的元素,要在它前面的元素依次取出后,才能取出该元素)汽车过隧道、山洞 走独木桥
    2.队列的入口和出口各占一端
    数组:
    Array,是有序的元素序列,数组是在内存中开辟一段连续的空间,并在此空间中存储元素。
    数组存储有以下特点:
    1.查找元素块
    2.增删元素慢
    2.1指定索引位置删除元素。
    2.2指定索引位置添加元素。
    链表、二叉树、红黑树
    Set集合:单列数据结构
    特点:
    1.不允许存储重复的元素。
    2.最多包含一个null元素。
    3.通常认为Set接口元素是无序的。
    4.通常认为Set接口无索引。
    Set接口的子类:java.util.HashSet和java.util.LinkedHashSet
    //创建一个Set集合 HashSet
    Set<String> set = new HashSet<>();
    //添加元素
    set.add("小明");
    set.add("小王");
    set.add("小刘");
    set.add("小周");
    set.add("小王");
    //通过迭代器获取
    Iterator<String> iterator = set.iterator();
    while (iterator.hasNext()){
    //next()方法
    String str = iterator.next();
    System.out.println(str);
    }
    
    

    //构建一个Set集合  LinkedHashSet
    Set<String> set = new LinkedHashSet<>();
    set.add("小明");
    set.add("老王");
    set.add("老刘");
    set.add("老周");
    set.add("老王");
    set.add("老马");
    set.add("老张");
    set.add("老赵");
    set.add("老孙");
    Iterator<String> iterator = set.iterator();
    while (iterator.hasNext()){
    //next()方法
    String str = iterator.next();
    System.out.println(str);
    }


    HashSet集合
    它存储的元素不允许重复,并且元素是无序的(存取顺序不一致)、
    HashSet的底层实现需要有java.util。HashMap支持。
    它的元素是根据对象的哈希值来确定在集合中元素的存储位置,因此存取和查找性能较好,
    保证元素性能唯一依赖于重写的hashCode和equals方法
    JDK1.8之前 哈希表底层采用数组+链表结构存储数据
    JDK1.8之后 哈希表存储采用数组+链表+红黑树实现,当链表长度超过阈值(8),将链表转换成红黑树存储。(目的是为了提升查找性能)
    LinkedHashSet集合 (链表结构可以保证元素是有序的)
    元素不重复,并且是有序的。
    我们常说的链表结构:单向链表和双向链表
    Map集合:TreeMap, HashMap, LinkedHashMap
    特点:
    1.将键映射到值的对象,一个建设不能包含重复的键,每个键最多只能映射到一个值。
    2.Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。
    /*
    boolean containsKey(Object key)判断map集合中是否包含指定的key
    boolean containsValue(Object value)判断map集合中是否包含指定的value
    V get(Object key) 通过指定的key值获取对应的value值,如果没有找到就返回null
    Set<K> keySet() 获取map集合中所有的key值,封装到Set集合中
    V put(K key, V value) 将指定的一对key值和value值存储到map集合中,返回存储的value
    void putAll(Map<? extends K,? extends V> m) 从指定映射中将所有映射关系复制到此映射中(可选操作)。
    V remove(Object key) 根据指定的key值删除此映射(一对keyvalue) 返回删除的value
    int size() 返回map集合中的键值映射数
    Collection<V> values() 获取map集合中所有的value值,封装到Collection集合中
    Set<Map.Entry<K,V>> entrySet() 获取map集合中的所有的映射值,封装到map内部类Entry类中
    K getKey()获取entry集合中的key
    V getValue()获取entry集合中的value
    */
    //构建一个map集合
    Map<Integer, String> map = new HashMap<>();
    //put(K,V)
    map.put(1, "小明");
    map.put(5, "老王");
    map.put(3, "小刘");
    map.put(7, "小周");
    map.put(10, "小孙");
    map.put(4, "小赵");
    //判断包含
    boolean b = map.containsKey(7);
    System.out.println(b);
    boolean containsValue = map.containsValue("小刘");
    System.out.println(containsValue);
    //V get(K)
    String str = map.get(7);
    System.out.println(str);
    //获取map集合中的所有的key
    Set<Integer> keys = map.keySet();
    //获取迭代器
    Iterator<Integer> iterator = keys.iterator();
    while (iterator.hasNext()) {
    Integer key = iterator.next();
    System.out.print(key + ":");
    String value = map.get(key);
    System.out.println(value);
    }
    //Collection<V> values()
    Collection<String> values = map.values();
    //迭代器
    Iterator<String> values2 = values.iterator();
    while (values2.hasNext()){
    String value = values2.next();
    System.out.println(value);
    }
     
  • 相关阅读:
    python学习之路——匿名行数/函数递归与二分法
    python学习之路——作业 day16(18/10/10)
    python学习之路——global与nonlocal.py、装饰器
    python学习之路——命名关键字参数、函数对象、函数嵌套、名称空间与作用域、闭包函数
    matplotlib绘图库
    Java快速入门
    Eclipse常用快捷键
    Python网络爬虫-Scrapy框架
    Python网络爬虫-requests模块(II)
    Python网络爬虫-requests模块
  • 原文地址:https://www.cnblogs.com/lk625/p/13942101.html
Copyright © 2011-2022 走看看