• 集合框架


    1.集合框架

      1.数组长度固定不变,不能很好地适应元素数量动态变化的情况。

      2.可通过数组名.length获取数组的长度,却无法直接获取数组中真实存储的个数。

      3.在进行频繁插入、删除操作时同样效率低下。

      Java集合框架为我们提供了一套性能优良、使用方便的接口和类,它们都位于Java.util包中。

      集合框架是为表示和操作集合而规定的一种统一的标准体系结构。

      集合框架都包含三大块内容:

        1.对外的接口

        2.接口的实现

        3.对集合运算的算法

      1.接口:

       List:ArrayList LinkedList

      Map:Hashtable HashMap     

      扩容原理:int newCapacity = oldCapacity + (oldCapacity >> 1);

      Java集合框架中的两大类接口:Collection和Map。

      Collection又有两个子接口:List和Set。

      Java集合框架共有三大类接口:List、Set和Map。

      它们的共同点:都是集合接口,都可以用来存储很多对象。

      它们的区别如下

        1.Colection接口存储一组不唯一(允许重复)、无序的对象。

         2.Set接口继承Collection接口,存储一组唯一(不允许重复)、无序的对象。

        3.List接口继承Collection接口,存储一组不唯一(允许重复)、有序(以元素插入的次序来放置元素,不会重新排列)的对象。

        4.Map接口存储一组成对的键-值对象,提供key到value的映射。Map中的key不要求有序,不允许重复。value同样不要求有序,但允许重复。

        5.Iterator接口是负责定义访问和遍历元素的接口。

    2.List接口

       实现List接口的常用类有ArrayList和LinkedList。它们都可以容纳所有类型的对象,包括null,允许重复,并且都保证元素的存储顺序。

    1.ArrayList集合类

      List接口中定义的各种常用方法:

        boolean add(Object o)                在列表末尾顺序添加元素,起始索引位置从0开始

        void add(int index,Object o)     在指定的索引位置添加元素,原索引位置及其后面的元素依次后移

      注意:新添加元素的索引位置必须介于0和列表中元素个数之间

        int size()                                           返回列表中的元素个数

        Object get(int index)                        返回指定索引位置处的元素

      注意:取出的元素是Object类型,使用前需要进行强制类型转换

        boolean contains(Object o)             判断列表中是否存在指定元素

        boolean remove(Object o)              从列表中删除元素

        Object remove(int index)                从列表中删除指定位置元素,起始索引位置从0开始

    2.LinkedList集合类

      LinkedList的一些特殊方法:

        void addFirst(Object O)                  在列表的首部添加元素

        void addLast(Object O)                  在列表的末尾添加元素

        Object getFirst()                             返回列表中的第一个元素

        Object getLast()                             返回列表中的第一个元素

        Object removeFirst()                      删除并返回列表中的第一个元素

        Object removeLast()                      删除并返回列表中的第一个元素

    3.Map接口

    1.HashMap集合类

      Map的常用方法

        Object put(Object key,Object value)         以"键-值对"的方式进行存储

        Object get(Object key)                             根据键返回相关联的值,若不存在指定的键,则返回       null

        Object remove(Object key)                      删除指定的键映射的"键-值对"

         int size()                                                  返回元素个数

         Set keySet()                   返回键的集合

         Collection values()              返回值的集合

         boolean containsKey(Object key)      若存在指定的键映射的"键-值对",则返回true

         boolean isEmpty()              若不存在键-值映射关系,则返回true

         void clear()                                             从此映射中移除所有映射关系

      5种遍历方法

    public static void main(String[] args) {
            
            HashMap<String,String> map=new HashMap<String,String>();
            map.put("a","aaa");
            map.put("b","bbb");
            map.put("c","ccc");
            
            //1
            Set<String> keySet = map.keySet();
            for (String key : keySet) {
                System.out.println(key);
            }
            System.out.println();
            
            //2
            Collection<String> collection = map.values();
            for (String value : collection) {
                System.out.println(value);
            }
            System.out.println();
            
            //3
            Set<Entry<String, String>> entrySet = map.entrySet();
            for (Entry<String, String> entry : entrySet) {
                System.out.println(entry.getKey());
                System.out.println(entry.getValue());
            }
            System.out.println();
            
            //4
            Set<String> keySet2 = map.keySet();
            Iterator<String> interator=keySet2.iterator();
            while(interator.hasNext()){
                String key2=interator.next();
                System.out.println(key2);
                System.out.println(map.get(key2));
            }
            System.out.println();
            
            //5
            Iterator<Entry<String, String>> iterator = map.entrySet().iterator();
            while(iterator.hasNext()){
                Entry<String, String> entry = iterator.next();
                System.out.println(entry.getKey());
                System.out.println(entry.getValue());
            }
        }

    3.Iterator迭代器

    public static void main(String[] args) {
            Dog dog1 = new Dog("兰兰",100,90,"拉不拉");
            Dog dog2 = new Dog("楠楠",100,90,"雪纳瑞");
            Dog dog3 = new Dog("娜娜",100,90,"拉不拉");
            Dog dog4 = new Dog("妮妮",100,90,"拉不拉");
            Dog dog5 = new Dog("静静",100,90,"拉不拉");
            Map dogMap = new HashMap();
            dogMap.put(dog1.getName(),dog1);
            dogMap.put(dog2.getName(),dog2);
            dogMap.put(dog3.getName(),dog3);
            dogMap.put(dog4.getName(),dog4);
            dogMap.put(dog5.getName(),dog5);
            
            Set key =  dogMap.keySet();
            //获得Iterator对象
            Iterator it = key.iterator();
            while(it.hasNext()){
                String key = (String)it.next();
                System.out.println(key);
                Dog dog = (Dog)dogMap.get(key);
                dog.print();
            }
            
        }

      2.for增强
      for(Object key : keys){
            Dog dog = (Dog)dogMap.get(key);
        }
     

     4. 数组和集合的主要区别

      1.数组需要声明长度,而集合不用。

      2.数组声明了它容纳的元素的类型,而集合不声明。

      3.数组是一种可读/可写数据结构没有办法创建一个只读数组。然而可以使用集合提供的ReadOnly方   只读方式来使用集合。该方法将返回一个集合的只读版本。

  • 相关阅读:
    QT导出csv
    QTableView右键删除功能实现
    搜索框实现
    centos同步时间报错问题解决
    git怎么撤回提交
    python2报错 ascii' codec can't decode byte 0xe4 in position 5: ordinal not in range python3没问题
    使用poython将文本转换成doc文档
    CSS层叠样式总结
    Jrebel热部署插件安装
    VMware为CentOS设置固定ip
  • 原文地址:https://www.cnblogs.com/wxl941549541/p/8539194.html
Copyright © 2020-2023  润新知