集合框架

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方   只读方式来使用集合。该方法将返回一个集合的只读版本。

原文地址:https://www.cnblogs.com/wxl941549541/p/8539194.html