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)将属性内容通过输出流输出

  • 相关阅读:
    进度条
    html5 表单新增事件
    html5 表单的新增type属性
    html5 表单的新增元素
    html5 语义化标签
    jq 手风琴案例
    codeforces 702D D. Road to Post Office(数学)
    codeforces 702C C. Cellular Network(水题)
    codeforces 702B B. Powers of Two(水题)
    codeforces 702A A. Maximum Increase(水题)
  • 原文地址:https://www.cnblogs.com/chenhceng/p/7677802.html
Copyright © 2011-2022 走看看