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()); } } }