首页 > 代码库 > JAVA的集合类

JAVA的集合类



集合类的继承关系

Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
│├HashSet
│└TreeSet
│ 
Map
├Hashtable
├HashMap
 

        Collection接口中有很多方法 ,值得特别提出的是Inerator方法;它返回在此collection的元素上进行迭代的迭代器,用于遍历集合中的对象,用法看     http://blog.csdn.net/u010634066/article/details/37880803



一   List集合

List接口继承了Collection接口,还定义了2个非常重要的方法

get(int index)  //获得指定索引的元素

get(int index,Object obj)  //将集合中指定索引位置的值改为指定的对象;


List接口的实现类:

ArrayList:优点是实现了可变数组,允许所有元素(包括null,set集合中不能包含重复对象)可以实现快速访问;

                    缺点是插入删除对象效率低速度慢

LinkedList:采用链表存储对象,插入删除速度快

                       随机访问效率低;

实例化

List list1=new ArraryList();
List list2=new LinkedList();


二  SET 集合

set集合中的对象不按特定的顺序排序,只是简单的把对象加入,set集合中不能包含重复的对象;

set接口继承了collection接口


set接口实现类:


HashSet: 用hash表支持,不保证set迭代顺序,特别是保证该顺序一直不变(比如我们一般迭代都是按自然增长顺序迭代,第一根第二比较等等,这里不不是),此类允许使用null

                HashSet hs=new HashSet();
		hs.add(1);
		hs.add(22);
		hs.add(33);
		hs.add(4);
		hs.add(null);//可以使用null
		System.out.println(hs);
//结果是   [null, 1, 33, 4, 22]   可以看到它不是按照顺序迭代的		

TreeSet  实现了java.unit.SortedSet接口;因此teeeset实现的Set集合在遍历时候可以按照自然增长顺序题赠排序;

      TreeSet类新增的方法

Object first():返回集合中的第一个元素.
Object last():返回集合中最末一个元素.
SortedSet headSEt(toElement):返回此Set的子集,由小于toElement的元素组成.
SortedSet tailSet(fromElement):返回此Set的子集,由大于或等于fromElement的元素组成.
SortedSet subSet(fromElement,toElement):返回此Set的子集合,范围由fromElement(包含)到toElement(不包含).
特别强调一点:
Treeset中的元素是有序的.

TreeSet ts=new TreeSet();
		ts.add(3);
		ts.add(34);
		ts.add(6);
		ts.add(0);
		ts.add(0);
		System.out.println(ts);
		System.out.println(ts.first());
		System.out.println(ts.last());
		//包好object(不包含)之前所有的对象,这里是对象3之前的所有对象,不包含3
		System.out.println(ts.headSet(3));
		//包好object from 和  object to (不包含)之前所有的对象
		System.out.println(ts.subSet(3, 34));
		//返回object to 之后的所有对象  包含to
		System.out.println(ts.tailSet(6));
</pre><pre class="java" name="code">//结果:
[0, 3, 6, 34]
0
34
[0]
[3, 6]
[6, 34]

可以发现迭代出来后市已经排序好了的;我们不难看出:TreeSet并不是根据元素的插入顺序来排序的,而是根据元素的实际值来排序的.
我们不难看出:TreeSet并不是根据元素的插入顺序来排序的,而是根据元素的实际值来排序的.


MAP集合


Map没有继承Collection接口,其提供的是key到value的映射。Map接口不能包含相同的Key,每个key只能映射 种称为散死技术进行的处理,亲生一个散死码的整数值,散列码常用作一个偏移量,该偏移量对应分配给映射的内存区域的起始位置,从而来确定存储对象在映射中的存储位置。 Map集合包含Map接口和Map接口的所有实现类。

Map接口

Map接口位于java.util包下,实现Map的类是可用来存储键(Key)——值(Value)对的容器。

Map接口的实现类有HashMap和TreeMap等,底层分别使用哈希表和二叉树来实现存储。

此容器中存储的键——值对通过键来标识,所以键不能重复。

提供的常用方法有:

Object put(Object key,Object value);//往容器中添加元素,键、值均为对象,由于键不能重复,如果添加的元素的key已存在,则覆盖value,以Object类型返回被覆盖的value;如果添加的元素的key不存在,则返回null。




Object get(Object key);//获取容器中键为key的元素的value,以Object类型返回。如果不存在此key,则返回null。




Object remove(Object key);//从容器中移除键为key的元素,以Object类型返回该元素的value;如果无元素的键为key,则返回null,如果此映射允许 null 值,则返回 null 值并不一定 表示该映射不包含该键的映射关系;也可能该映射将该键显示地映射到 null。




boolean containsKey(Object key);//该容器是否包含键为key的元素。




boolean containsValue(Object value);//该容器是否包含值为value的元素。




int size();//该容器中键值对的个数;




boolean isEmpty();//是否为空




void putAll(Map t);//将t中的所有元素添加到该容器中




void clear();//清空




在判定是否相同时,会隐式调用对象的equals和hashCode方法,以此为依据是否重复。

import java.util.*;
public class UpdateStu {
  public static void main(String[] args) {
   Map map = new HashMap();    //构建Map实例
   map.put("01","李同学");     //向集合中添加对象
   map.put("02","魏同学");
   Set set = map.keySet();     //构建map集合中的所有key对象的集合
   Iterator it = set.iterator();     //创建集合迭代器
   System.out.println("key集合中的元素:");
   while(it.hasNext()){      //遍历集合
    System.out.println(it.next());
   }
   Collection coll = map.values();   //构建map集合中所有values值集合
   it = coll.iterator();
   System.out.println("values集合中的元素:");
   while(it.hasNext()){      //遍历集合
    System.out.println(it.next());
   }
  }
}


Map接口的实现类


Map 接口常用的实现类有HashMap和TreeMap。


HashMap类实现的Map集合对于添加和删除映射关系效率更高。


 而TreeMap中的映射关系存在一定的顺序。


 


HashMap类:基于哈表的map接口的实现,此实现提供所有可选的映射操作,并允许使用null值和nll键,但必须保证键的唯一性。


TreeMap 类:不仅实现了Map接口,还实现了java.util.SortedMap接口,因此集合中的映射关系具有一定的顺序性。它是根据锓对象按照一定的顺序排列的,因此不允许对象是null。