java-容器

容器概念

在书写程序的时候,我们常常需要对大量的对象引用进行管理。为了实现有效的归类管理,我们常常将同类的引用放置在同一数据容器中。
由于数据容器中存放了我们随时可能需要使用到的对象引用,所以一般的数据容器都要能提供方便的查询、遍历、修改等基本接口功能。
早期的OOP语言都通过数组的方式来实现对引用集的集中管理和维护。
但是数组方式下,数组大小需要提前被确定,并不允许修改大小,导致其作为一种灵活的数据容器的能力的功能大为下降。

Java中容器如下图:

List容器

List容器是有序的,可重复的。
LinkedList :其数据结构采用的是链表,此种结构的优势是删除和添加的效率很高,但随机访问元素时效率较ArrayList类低。
ArrayList:其数据结构采用的是线性表,此种结构的优势是访问和查询十分方便,但添加和删除的时候效率很低。
List是一个接口,不能实例化,需要实例化一个ArrayList或者LinkedList。

例如:

List al = new ArrayList();
al.add("a");
al.add("b");
al.add("c");
al.add("a");
System.out.print(al);
//结果为[a,b,c,a],怎么存就怎么取,有序的,可重复

List接口的更多方法,请参考Java API。

Set容器

Set(集):集合中的对象不按特定方式排列,并且没有重复对象,它的有些实现类能对集合中的对象按特定方式排列.
Set接口主要有两个实现类HashSet和TreeSet,HashSet类按照哈希算法来存取集合中的对象,存取速度比较快,HashSet类还有一个子类LinkedHashSet类,不仅实现了哈希算法,而且实现了链表数据结构,TreeSet类实现了SortedSet接口,具有排序功能.

例如:

        Set s1 = new HashSet();
        s1.add("a");
        s1.add("b");
        s1.add("c");
        s1.add("a");
        System.out.print(s1);
        //结果为[b,c,a],结果为无序的,不可重复,所以只有一个a

Set接口的更多方法,请参考Java API。

Map容器

Map:一组成对的“键值对”对象,即其元素是成对的对象,最典型的应用就是数据字典,并且还有其它广泛的应用。另外,Map可以返回其所有键组成的Set和其所有值组成的Collection,或其键值对组成的Set,并且还可以像数组一样扩展多维Map,只要让Map中键值对的每个“值”是一个Map即可。

例如:

        Map m = new HashMap();
        m.put("a","a1");
        m.put("b","a1");
        m.put("c","a1");
        m.put("d","a1");
        System.out.print(m);

Map更多用法,请参考Java API。

泛型

Java泛型(generics)是JDK 5中引入的一个新特性,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
Java泛型方法和泛型类支持程序员使用一个方法指定一组相关方法,或者使用一个类指定一组相关的类型。

使用Java泛型的概念,我们可以写一个泛型方法来对一个对象数组排序。然后,调用该泛型方法来对整型数组、浮点数数组、字符串数组等进行排序。

下面是定义泛型方法的规则:

所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的)。
每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
泛型方法方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像int,double,char的等)。
例如:

// 泛型方法 printArray  
public static < E > void printArray( E[] inputArray )
   {
      // 输出数组元素            
         for ( E element : inputArray ){        
            System.out.printf( "%s ", element );
         }
         System.out.println();
    }
 
        //在main方法里
        Integer[] intArray = { 1, 2, 3, 4, 5 };
        System.out.println( "Array integerArray contains:" );
        printArray( intArray  ); // 传递一个整型数组
       //结果为:Array integerArray contains:1 2 3 4 5 6

更多泛型应用,请参考Java API。

import java.util.HashMap;
import java.util.Map;

public class Mammal {
    public static void main(String args[]){
            Map<String, String> m = new HashMap<String, String>();            
            m.put("a","a1");
            m.put("b","b1");
            m.put("c","c1");
            for(Map.Entry entry : m.entrySet()) {
                System.out.println(entry.getKey());
                System.out.println(entry.getValue());
            }
       }
}

 

posted @ 2018-12-27 09:56  yangly  阅读(220)  评论(0编辑  收藏  举报