zoukankan      html  css  js  c++  java
  • 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("数据存在");
            }
        }
    
    }
  • 相关阅读:
    马云演讲:给自己一个梦想,给自己一个承诺,给自己一个坚持!
    转:如何成为一个伟大的开发者
    数据挖掘之七种常用的方法
    windows命令行
    100万亿意味着什么?
    ubuntu环境配置
    Ubuntu runlevel修改
    Ubuntu 用户及组管理
    Git学习笔记
    Git详解之三 Git分支
  • 原文地址:https://www.cnblogs.com/matianpeng/p/8539292.html
Copyright © 2011-2022 走看看