Javaoop_集合框架

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

 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接口是负责定义访问和遍历元素的接口。

----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开始

--ArrayList示例

    List<Penguin> list=new ArrayList<Penguin>();
        
        Penguin pe1=new Penguin("欧欧",2);
        Penguin pe2=new Penguin("拉拉",3);
        Penguin pe3=new Penguin("加加",4);
        
        list.add(pe1);
        list.add(pe2);
        list.add(pe3);
        
        System.out.println("有"+list.size()+"组信息");
        
        for(Penguin pe:list) 
        {
            pe.Pen();
        }
        
        System.out.println("--------------------------------");
        list.remove(pe1);
        
        for(Penguin pe:list) 
        {
            pe.Pen();
        }
            

ArrayList

以数组实现。节约空间,但数组有容量限制。超出限制时会增加50%容量,用System.arraycopy()复制到新的数组。因此最好能给出数组大小的预估值。默认第一次插入元素时创建大小为10的数组。

---LinkedList集合类

  LinkedList的一些特殊方法:

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

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

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

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

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

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

--LinkedList示例

import java.util.List;

import java.util.LinkedList;;

public class MyLinked {

    public static void main(String[] args) {
        
        LinkedList<Dog> list=new LinkedList<Dog>();
        
        Dog dog1=new Dog("欧欧",3,"男");
        Dog dog2=new Dog("拉拉",4,"女");
        Dog dog3=new Dog("雷欧",2,"男");
        Dog dog4=new Dog("杰克",5,"女");
        Dog dog5=new Dog("杰克",5,"男");
        
        list.add(dog1);
        list.add(dog2);
        list.add(dog3);
        list.add(dog4);
        list.add(dog5);
        
        for(Dog dog:list) 
        {
            dog.Realization();
        }
        
        System.out.println("---------------------------------------------分割线");
        
        list.addLast(dog4);
        list.addFirst(dog3);
        
        for(Dog dog:list) 
        {
            dog.Realization();
        }
        
        System.out.println("---------------------------------------------分割线");
        
        list.removeLast();
        list.removeFirst();
        
        for(Dog dog:list) 
        {
            dog.Realization();
        }
        

---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()                                             从此映射中移除所有映射关系

---Map示例

import java.util.HashMap;

import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import java.util.Iterator;

public class Mymain_Map {

    public static void main(String[] args) {
        
        Map<Integer,String> map=new HashMap<Integer,String>();
        
        map.put(1, "中国");
        map.put(2, "美国");
        map.put(3, "英国");
        map.put(4, "日蹦");
            
        System.out.println("--------------输出key和values----------------------");
        System.out.println(map.keySet());
        System.out.println(map.values());
        System.out.println(map);
        
        System.out.println("----------------根据key--------------------");            
        for(Object o:map.keySet()) 
        {
            System.out.print(o);
            System.out.println(map.get(o));
        }
                
        System.out.println("------------------Set出key和value------------------");
        
        Set <Entry<Integer,String>> enertSet=map.entrySet();
        
        for(Entry<Integer,String>enert:enertSet) 
        {
            System.out.print(enert.getKey());
            System.out.println(enert.getValue());
        }
        
        System.out.println("-------------------根据values-----------------");
        for(Object o:map.values()) 
        {
            String values=o.toString();
            System.out.println(values);
        }
                        
        System.out.println("----------------Iterator迭代器--------------------");
        Set <Integer> key=map.keySet();
        Iterator<Integer> it=key.iterator();
        while(it.hasNext())
        {
            Integer k=it.next();    
            System.out.print(k);
            System.out.println(map.get(k));
        }
        
        System.out.println("----------------Iterator迭代器key和value--------------------");            
        Iterator <Entry<Integer,String>> Iterator=map.entrySet().iterator();
        while(Iterator.hasNext()) 
        {
            Entry<Integer,String> keys=Iterator.next();
            System.out.print(keys.getKey());
            System.out.println(keys.getValue());
            
        }
        
        System.out.println("----------------数据清除--------------------");
        map.clear();
        if(map.isEmpty()) 
        {
            System.out.println("数据清除");
        }else {
            System.out.println("数据存在");
        }
    }

}
原文地址:https://www.cnblogs.com/matianpeng/p/8539292.html