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

    Java SE包含了由一组类和接口组成的Java集合框架,用来将储存的数据以某种结构组织,并以特定的方式来访问这些数据,其目的就是提供一个处理对象集合的通用框架。

    Java集合框架将对象储存的方式分为三种类型,分别是:

        Set(集):对象容器中的对象没有顺序,且不能重复。

        List(列表):对象容器中的对象按照索引顺序排序,可以有重复的对象。

        Map(映射):对象容器中的元素包含一对“键对象-值对象”映射,其中键对象不能重复,值对象可以重复。

    为支持对象的排序和遍历,提供以下几个接口:

        接口SortedSet为Set类型容器提供排序功能。

        接口SortedMap是为Map类型容器提供键对象的排序。

        接口Iterator提供了对集合对象进行遍历访问的遍历器。

        接口Comparable和Comparator用来实现集合中对象的排序。

    集合Collection接口位于Set接口和List接口的最顶层,是Set接口和List接口的父接口。Collection接口定义了基本操作(增删...)、批量操作、数组操作的基本方法。

    在Collection接口中有一个iterator()方法可以返回一个Iterator对象,来遍历集合中的所有元素。

    Iterator接口的方法:

              1.hasNext():如果集合中还有更多的元素,该方法返回true。

              2.next():返回集合中的下一个元素。

              3.remove():删除iterator返回的最后一个元素。

    每个集合都提供专用的机制访问各自的数据,但它们都支持iterator方法,故我们可以通过统一的机制来应用于所有结合类的遍历。

    此外,JDK1.5后又提供了foreach循环语句,可以用更简单的方法遍历集合和数组。

    在实际开发中我们常常是用Collection接口的子接口:List和Set

    List接口

      1.List中的元素是有顺序的。

      2.List通常允许元素重复。

      3.支持null元素

      4.可以通过索引访问List对象中的元素

    1) ArrayList(在底层使用数组作为容器,不同的是可以增删查改)

      常用方法:add()、addAll、get()、set()、remove()  

      Vector与Arraylist类似,区别是Vector线程安全,速度较慢。

    泛型:

        允许在定义类、接口的时候指定类型形式参数,强迫程序在编译期检查从集合中取得的数据的类型。

    equals()方法:

        定位一个对象是通过equals方法比较来进行定位的。

    2)LinkedList

        LinkedList是实现了双向链表功能的列表,列表中每个元素均放在独立的空间中,并且每一个空间都保存有上一个和下一个链表的索引。

        在需要对元素中间部分进行大量的增删查改时,可以选择使用LinkedList。

    Set接口

        继承了Collection接口的全部方法,并且有如下特征:

            1.元素不能重复(必须重写equals()方法&hashcode()方法)

            2.元素可能有顺序,也可能没有。

            3.不能用索引来直接访问Set中的元素。

        Set最常用的类是HashSet和TreeSet

            1.HashSet

            基于哈希算法的Set接口实现,有以下特点:

                1.遍历HashSet时,元素无顺序。

                2.不允许出现重复的元素。(具有相同的哈希码且用equals()方法比较返回true的两个对象)

                3.允许包含null元素

            2.TreeSet

            在实现Set接口的同时实现了SortedSet接口,保证对象按照一定的顺序排序。这种顺序不是按照对象添加的顺序而是按照一定的算法来排序。

            也可以根据提供的Comparator进行排序。

            在JDK类库中有一部分类实现了Comparable接口,例如Integer、Double、String等到,该接口有一个compareTo(object o)方法,返回整型数据,返回为正数为大向后排序。

            TreeSet根据集合元素的大小按照升序排列,而自定义排序是按照特定的比较器排序(使用comparator接口,同时改写compare(object 01,object o2)方法)。

    Map 接口

          Map接口是Java集合框架中不同于Collection接口的另一个重要的接口,它对应的是一种从键(Key)到值(Value)对应关系的集合。Map类型有两组对象,key和value,key不能重复,value可以重复。

          Map接口中定义了Map对象所共有的方法:基本操作、批量操作、Collection视角的操作(提供了将Map转化为Collection的手段)

          Map的基本方法:get(object key)返回与指定键相关的值 、put(object key,object value)向该映射添加键值对、remove(object key)删除指定的键值对

    containsKey(object key)如果该映射包含指定键返回true、containsValue(object value)如果该映射包含指定值返回true、keySet()、values()

          

          Map特点:我们可以设置有意思的键(如将用户名设置为key键);Map不能同时遍历键和值,只能遍历其中之一。

      

      HashMap

          基于哈希算法的Map接口实现。必须重写hashcode()和equals方法。

          hashMap使用哈希码通过键对其内容进行快速的查找。

      TreeMap

          TreeMap类是基于红黑树算法的Map接口实现,其键的存放方式和TreeSet相似,存放在树中,键的顺序按照自然顺序或者自定义顺序两种方式排列。因为其考虑到了排序问题,故速度比HashMap慢。

    工具类Collections和Arrays

         工具类Collections和Arrays提供了大量方法,对元素进行排序、查询、修改等操作,且都是静态方法。

         Collections.Sort(object o)自然顺序排序、Collections.reverse(object o)反转排序、Collections.shuffle(object o)混排

         此外Collections还提供了多个静态方法用于创建线程安全的同步集合:

              1.synchronizedCollection(Collection c)返回一个线程安全的collection。

              2.synchronizedList(List list)返回一个线程安全的list

              3.synchronizedSet(Set s)返回一个线程安全的set

              4.synchronizedMap(Map m)返回一个线程安全的map  

        Arrays类

            用来操作数组的排序和搜索等。

        Hashtable的子类Properties

            用于处理属性文件夹,将Map形式的键值对数据存在一个扩展名为“.properties”的文本文件中,作为软件的配置文件。

          Properties类的主要方法:

              1.getProperty(String key)根据属性键key获取对应的值。

              2.setProperty(String key,String value)设置属性

              3.load(InputStream in):从输入流中装载全部属性

              4.store(OutputStream out,String comments)将属性内容通过输出流输出

  • 相关阅读:
    PHP图像操作:3D图、缩放、旋转、裁剪、添加水印(三)
    PHP图像操作:3D图、缩放、旋转、裁剪、添加水印(二)
    PHP图像操作:3D图、缩放、旋转、裁剪、添加水印(一)
    问题:关于贴友分类菜单的实现
    jq实现图片轮播:圆形焦点+左右控制+自动轮播
    CSS快速制作图片轮播的焦点
    常用的正则表达式归纳—JavaScript正则表达式
    JQuery插件之图片轮播插件–slideBox
    Javascript时间操作小结
    python第八天)——购物车作业优化完成
  • 原文地址:https://www.cnblogs.com/chenhceng/p/7677802.html
Copyright © 2011-2022 走看看