zoukankan      html  css  js  c++  java
  • 【java基础知识】【java集合类和接口】

    在JDK API中专门设计了一组类,这组类的功能就是实现各种各样方式的数据存储,这样一组专门用来存储其它对象的类,一般被称为对象容器类,简称容器类,这组类和接口的设计结构也被统称为集合框架(Collection Framework)。
    这组类和接口都包含在java.util包中。
    
    为了使整个集合框架中的类便于使用,在设计集合框架时大量的使用接口,实际实现的功能类实现对应的接口,这样可以保证各个集合类的使用方式保持统一。

    集合框架中的类就分成了三大类:
    1、List系列
       该系列中的类按照索引值来操作数据,允许存放重复的元素。
    2、Set系列
         该系列中的类按照索引值来操作数据,不允许存放重复的元素。
    3、Map系列
       该系列中的类按照名称来操作数据,键(key)不允许重复,值(value)可以重复,一个键对应一个唯一的值。

    1、List(有序、索引、可重复)

    
    
    List系列的类均实现List接口,大部分的类都以List作为类名的后缀,也有部分该体系中的类命名比较特殊。
        该系列中的类,比较常见的有ArrayList和LinkedList两个。其中ArrayList是以数组为基础实现的List,而LinkedList则是以链表为基础实现的List,ArrayList拥有数组的优点,而LinkedList拥有链表的优点。
        由于该体系中的类均实现List接口,所以在这些类的内部,相同的功能方法声明是保持一致的,下面进行一一介绍:

      a、add方法
      boolean add(Object o)
      该方法的作用是追加对象o到已有容器的末尾。

      另外一个add方法:
      void add(int index, Object element)
      该方法的作用是将对象element插入到容器中索引值为index的位置,原来位于该位置的对象以及后续的内容将依次向后移动。

      b、addAll方法
      boolean addAll(Collection c)
      该方法的作用是将容器对象c中的每个元素依次添加到当前容器的末尾。

      另外一个addAll方法:
      boolean addAll(int index, Collection c)
      该方法的作用是将容器对象c中的第一个元素插入到当前容器中索引值为index的位置,第二个元素插入到当前容器中索引值为index+1的位置,依次类推而当前容器中原来位于index以及index索引值以后的元素则依次向后移动。

      c、get方法
      Object get(int index)
      该方法的作用是返回当前容器对象中索引值为index的元素的内容。

      d、indexOf方法
      int indexOf(Object o)
      该方法的作用是查找当前容器中是否存在对象o,如果存在则返回该对象第一次出现位置的索引值,如果不存在则返回-1。
      另外一个方法lastIndexOf则是从末尾向前查找,返回从末尾向前第一次出现位置的索引值,如果不存在则返回-1。

      e、remove方法
      Object remove(int index)
      该方法的作用是删除索引值为index的对象的内容,如果删除成功则返回被删除对象的内容。

      另外一个remove方法:
      boolean remove(Object o)
      该方法的作用是删除对象内容为o的元素,如果相同的对象有多个,则只删除索引值小的对象。如果删除成功则返回true,否则
    返回false。
    无论使用哪一个remove方法,类内部都自动移动将被删除位置后续的所有元素向前移动,保证索引值的连续性。

      f、set方法
      Object set(int index, Object element)
      该方法的作用是修改索引值为index的内容,将原来的内容修改成对象element的内容。

      g、size方法
      int size()
      该方法的作用是返回当前容器中已经存储的有效元素的个数。

      h、toArray方法
      Object[] toArray()
      该方法的作用是将当前容器中的元素按照顺序转换成一个Object数组。

    /**
     * 以ArrayList类为基础演示List系列类的基本使用
     */
    public class ArrayListUse {
             public static void main(String[] args) {
                       //容器对象的初始化
                       List list = new ArrayList();                 
                       //添加数据
                       list.add("1");
                       list.add("2");
                       list.add("3");
                       list.add("1");
                       list.add("1");            
                       //插入数据
                       list.add(1,"12");               
                       //修改数据
                       list.set(2, "a");                  
                       //删除数据
                       list.remove("1");              
                       //遍历
                       int size = list.size(); //获得有效个数
                       //循环有效索引值
                       for(int i = 0;i < size;i++){
                                System.out.println((String)list.get(i));
                       }
             }
    }
     该程序的运行结果为:
    
                       12
    
               a
               3
               1
               1
    2、Set(唯一、无序)
        Set系列中的类都实现了Set接口,该系列中的类均以Set作为类名的后缀。该系列中的容器类,不允许存储重复的元素。也就是当容器中已经存储一个相同的元素时,无法实现添加一个完全相同的元素,也无法将已有的元素修改成和其它元素相同。
        Set系列中类的这些特点,使得在某些特殊场合的使用比较适合。
    该系列中常见的类有:
        1、CopyOnWriteArraySet
        以数组为基础实现的Set类。
        2、HashSet
        以哈希表为基础实现的Set类。
        3、LinkedHashSet
        以链表为基础实现的Set类。
        4、TreeSet
        以树为基础实现的Set类。
            
    以不同的数据结构类型实现的Set类,拥有不同数据结构带来的特性,在实际使用时,根据逻辑的需要选择合适的Set类进行使用。 Set系列中的类的方法和List系列中的类的方法要比List系列中少很多,例如不支持插入和修改,而且对于Set系列中元素的遍历也需要转换为专门的Iterator(迭代器)对象才可以进行遍历,遍历时顺序和Set中存储的顺序会有所不同。 下面是以HashSet类为基础实现的示例代码,代码如下:
    
    
    import java.util.*;
    
    /**
     * 以HashSet为基础演示Set系列类的基本使用
     */
    public class HashSetUse {
             public static void main(String[] args) {
                       //容器对象的初始化
                       Set set = new HashSet();         
                       //添加元素
                       set.add("1");
                       set.add("2");
                       set.add("3");
                       set.add("1");
                       set.add("1");                              
                       //删除数据
                       //set.remove("1");          
                       //遍历
                       Iterator iterator = set.iterator();
                       while(iterator.hasNext()){
                                System.out.println((String)iterator.next());
                       }
             }
    }
    该程序的运行结果为:
    3
    2
    1

    list用add()加进去后是有先后顺序的,顺序是一定的,set刚好没有顺序,简单来说是乱的
    ArrayList 把1,2,3,4先后加进去,遍历出来就是1234,Set可不一定哟,可能就是4213或1243等等

    3、Map(键值对、键唯一)

    
    
    Map系列中的类都实现了Map接口,该系列中的部分类以Map作为类名的后缀。该系列容器类存储元素的方式和以上两种完全不同。
    Map提供了一种使用“键:值”这样的名称和数值对存储数据的方法,在该存储方式中,名称不可以重复,而不同的名称中可以存储相同的数值。具体这种存储的格式将在示例代码中进行实现。
    在这种存储结构中,任何不为null的对象都可以作为一个键(key)来作为存储的值(value)的标识,使用这种形式更利于存储比较零散的数据,也方便数据的查找和获得。Map类中存储的数据没有索引值,系统会以一定的形式索引存储的名称,从而提高读取数据时的速度。
             
    该系列中常见的类有: 1、HashMap 以Hash(哈希表)为基础实现的Map类。 2、LinkedHashMap 以链表和Hash(哈希表)为基础实现的Map类。 3、TreeMap 以树为基础实现的Map类。 和上面的结构类似,以不同的数据结构实现的Map类,拥有不同数据结构的特点,在实际的项目中使用时,根据需要选择合适的即可。
    该系列的类中常见的方法如下: a、get方法 Object get(Object key) 该方法的作用是获得当前容器中名称为key的结构对应的值。
    b、keySet方法 Set keySet() 该方法的作用是返回当前容器中所有的名称,将所有的名称以Set的形式返回。使用这个方法可以实现对于Map中所有元素的遍历。
    c、put方法 Object put(Object key, Object value) 该方法的作用是将值value以名称key的形式存储到容器中。

    d、putAll方法 void putAll(Map t) 该方法的作用是将Map对象t中的所有数据按照原来的格式存储到当前容器类中,相当于合并两个Map容器对象。
    e、remove方法 Object remove(Object key) 该方法的作用是删除容器中名称为key的值。
    f、size方法 int size() 该方法的作用是返回当前日期中存储的名称:值数据的组数。
    g、values方法 Collection values() 该方法的作用是返回当前容器所有的值组成的集合,以Collection对象的形式返回。

      下面是一个简单的示例,在该示例中演示Map系列类的基本使用,代码如下:
    
    
    import java.util.*;
    
    /**
     * 以HashMap为基础演示Map系列中类的使用
     */
    public class HashMapUse {
             public static void main(String[] args) {
                       //容器对象的初始化
                       Map map = new HashMap();           
                       //存储数据
                       map.put("苹果", "2.5");
                       map.put("桔子", "2.5");
                       map.put("香蕉", "3");
                       map.put("菠萝", "2");             
                       //删除元素
                       map.remove("桔子");              
                       //修改元素的值
                       map.put("菠萝", "5");             
                       //获得元素个数
                       int size = map.size();
                       System.out.println("个数是:" + size);          
                       //遍历Map
                       Set set = map.keySet();
                       Iterator iterator = set.iterator();
                       while(iterator.hasNext()){
                                //获得名称
                                String name = (String)iterator.next();
                                //获得数值
                                String value = (String)map.get(name);
                                //显示到控制台
                                System.out.println(name + ":" + value);
                       }
             }
    }
    
    
    
    该程序的运行结果为:

    个数是:3
    香蕉:3
    菠萝:5
    苹果:2.5

  • 相关阅读:
    php-有时候你会疑惑的小问题
    phpDocumentor生成文档
    mongodb重命名集合、数据库
    资料网站
    Service(服务)
    Component(组件)
    Module(模块)
    你不屑于大器晚成,就只能平庸一生
    是狼就磨好牙,是羊就练好腿!
    将Excel数据导入数据库
  • 原文地址:https://www.cnblogs.com/hikigaya-yukino/p/4182332.html
Copyright © 2011-2022 走看看