zoukankan      html  css  js  c++  java
  • 集合框架

    1.集合框架的分类

    当需要使用多个对象元素,又不确定个数的时候,使用集合动态的添加比数组更灵活,因为它会自动增长集合的长度。从而大大的提高软件的开发效率,而且不同的集合适用于不同的场合。

     java集合框架的三大类接口及其区别

    java集合框架共有三大类接口:List, SetMap

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

    它们的区别在与:

    Collection接口存储一组不唯一(允许重复),无序(没有顺序规律)的对象。

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

    List接口继承Collection接口,存储一组不唯一(允许重复),有序的对象。

    Map对象存储一组成对的键—值对象,提供key()value()的映射。Key不要求有序,不允许重复,value不要求有序,但是允许重复。

    Iterator接口是负责定义访问和便利元素的接口。

    2.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)

    从列表中删除元素

    Objectremove(int index)

    从列表中删除指定位置元素, 

    起始索引位置从0开始

     

    2.1 ArrayList集合类

    特性:不唯一(可以重复),有序,遍历效率高实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高

    2.2 LinkedList集合类

    采用链表存储方式。插入、删除元素时效率比较高

    相比ArrayList多出了一些特殊的方法

    方法名

    说明

    void  addFirst(Object o)

    在列表的首部添加元素

    void  addLast(Object o)

    在列表的末尾添加元素

    Object  getFirst()

    返回列表中的第一个元素

    Object  getLast()

    返回列表中的最后一个元素

    Object  removeFirst()

    删除并返回列表中的第一个元素

    Object  removeLast()

    删除并返回列表中的最后一个元素

    3.Map接口

     3.1:HashMap集合类

    专门处理键值映射数据的存储,每个元素都由两个对象组成,即一个键对象和一个值对象,可以根据键实现对应值的映射。

    使用这种集合的优点是查询指定元素效率高。

    Map接口常用的方法

    方法名

    说明

    Object put(Object key, Object val)

    以“键-值对”的方式进行存储

    Object get (Object key)

    根据键返回相关联的值,如果不存在指定的键,返回null

    Object remove (Object key)

    删除由指定的键映射的“键-值对”

    int size()

    返回元素个数

    Set keySet ()

    返回键的集合

    Collection values ()

    返回值的集合

    booleancontainsKey (Object key)

    如果存在由指定的键映射的“键-值对”,返回true

    4.迭代器Iterator

    所有的集合和类都没有提供相应的遍历方法,iterator为集合而生,专门实现集合的遍历。它隐藏了各种集合实现类的细节,提供了遍历集合的统一编程接口。

    Collection接口的iterator()方法返回一个iterator,通过iterator接口的两个方法可以实现遍历

     4.1 boolean hasNext();

    判断是否存在一个可访问的元素

     4.2 Object next();

    返回要访问的下一个元素

     4.3 使用iterator遍历集合类

    实例:

    // 1.创建4个企鹅对象

    Penguin feipan = new Penguin("飞蛾", "Q");

    Penguin songlin = new Penguin("胖胖", "Q");

    Penguin yangzhi = new Penguin("之歌", "Q");

    Penguin xinxin = new Penguin("欣欣", "Q");

    // 2.创建Mp集合并把企鹅对象放如其中

    Map<String, Penguin> Penguins = new HashMap<String, Penguin>();

    Penguins.put(feipan.getName(), feipan);

    Penguins.put(xinxin.getName(), xinxin);

    Penguins.put(yangzhi.getName(), yangzhi);

    Penguins.put(songlin.getName(), songlin);// songlin添加到指定的位置

    // 3.输出删除前集合中企鹅的数量

    System.out.println("共有:" + Penguins.size() + "只企鹅");

    System.out.println("*****************************");

    // 4.删除集合中第一个企鹅

    // Penguins.remove(0);//不能删除但是不报错

    Penguins.remove(xinxin.getName());

    // 5.显示删除后集合中各条狗的信息

    System.out.println("删除后,对象分别是:");

    System.out.println(Penguins);

    System.out.println("*****************************");

    // 6.集合中是否存在企鹅xinixn

    if (Penguins.containsKey(xinxin.getName())) {

    System.out.println(" 集合中包含企鹅xinxin的信息");

    } else {

    System.out.println(" 集合中不包含企鹅xinxin的信息");

    }

    System.out.println("*****************************");

    // 7.使用irerator输出集合中的元素

    Set keys = Penguins.keySet();

    Iterator its = keys.iterator();

    while (its.hasNext()) {

    String key = (String) its.next();//的到key

    Penguin value = (Penguin) Penguins.get(key);//通过key值转换对象

    System.out.println(value.getName() + " " + value.getSex());

    }

    System.out.println("*****************************");

    //8.使用foreach输出集合中的信息

    for (Penguin object : Penguins.values()) {

    System.err.println(object.getName()+" "+object.getSex());

    }

    System.out.println("*****************************");

    //9.使用老师的方法输出信息

    for (Iterator iterator = Penguins.keySet().iterator(); iterator.hasNext();) {

    String keys1 = (String) iterator.next();

    Penguin value = (Penguin) Penguins.get(keys1);//通过key值转换对象

    System.out.println(value.getName()+" "+value.getSex());

    }

    5.泛型集合

    Jdk1.5使用它泛型集合在创建集合对象时指定集合中元素的类型,从集合中取出元素时无需进行类型强制转换,并且把非类型对象放入集合中,会出现编译错误。

    实例语法:

    List<E>

    Map<key,value>

    6.hashtablehashMap的异同

      6.1 相同点:实现原理,功能相同,可以互用。

      6.2 主要区别:

        1) hashtable继承dictionary类,hashMap实现了Map的接口。

        2) hashtable线程安全,hashMap线程非安全

        3) hashtable不允许有空值,hashMap允许有空值

  • 相关阅读:
    ‘Found duplicate PV’ warnings when using LVM with multipath storage in RHEL/CentOS
    如何卸载windows的服务?卸载服务
    富文本wangeditor层级太高覆盖问题
    vue wangeditor
    vue消息提示this.$message方法
    MySQL之查询指定时间的数据
    企业微信第三方应用PC端实现用户点击注册的三种方式
    两款不带广告的輸入法
    jquery、css 的选择器
    广信可视电话设置可安装应用权限
  • 原文地址:https://www.cnblogs.com/Eason-chen/p/7642549.html
Copyright © 2011-2022 走看看