06_容器

1 Collection()接口 (容器)

为什么要有容器?

答:因为数组的长度一旦指定,程序执行的过程中不能改变,因此出现了容器,大小可以任意改变。

Collection是一个接口,它有两个子接口:Set()List()

2 Set() 接口

Set() 代表一个集合,它里面的内容是无序而且唯一的;

 

Set() 接口中有一个重要类:HashSet()

 

hashSet():哈希码最大的特点就是无序,查找速度最快。

 

3 List() 接口

List() 代表一个有序长度可变的数组,它里面的内容可以重复;

 

List() 接口中有两个重要类:ArrayList()LinkedList()

 

ArrayList() 它的内存地址是连续的;因此它的查找速度快,而更新慢。

 

LinkedList() 他的内存地址是不连续的;因此他它的更新速度快,而查找慢。

4 Iterator()接口(容器的迭代器)

所有实现了Collection接口的类都有一个Iterator()方法,这个方法会得到一个实现了Iterator接口的类的对象。

 

for(Iterator i = List.iterator();i.hasnext();){

  Object o = i.next();

  System.println.out(o);

}

 

List虽然有索引,但是也必须用迭代器来实现循环

5 Comparable()接口

所有可以“排序”的类都实现了java.lang.Comparable接口,Comparable接口中只有一个方法:

public int compareTo(Object obj);

该方法:返回 0  表示 this==obj; 

        返回整数表示 this > obj;

        返回负数表示 this < obj;

实现了Comparable 接口的类通过实现compareTo方法,从而确定该类对象的排序方式。

6 Map() 接口

为什么会出现Map

答:因为HashSet没有索引,不方便通过索引来对容器进行操作,所以出现了Map。所以其实Map就是在Set的基础上加了索引,并且索引可以自定义。

 

实现Map接口的类用来存储“键—值”对。

Map接口的实现类有HashMapTreeMap等。

Map类中存储的“键—值”通过键来标识,所以键值不能重复。

常用方法:

Object put(Object key,Object value);

Object get(Object key);

Object remove(Object key);

  

boolean containsKey(Object key);

boolean containsValue(Object value);

 

int size();

boolean isEmpty();

void putAll(Map t);

void clear();

 

示例代码:

import java.util.*;

public class Test {

public static void main(String[] args){

     Map m1 = new HashMap();

     Map m2 = new TreeMap();

    

    m1.put("one",new Integer(1));

    m1.put("two",new Integer(2));

    m1.put("three",new Integer(3));

    m2.put("A",new Integer(1));

    m2.put("B",new Integer(2));

    

    System.out.println(m1.size());

    System.out.println(m1.containsKey("one"));

    System.out.println(m2.containsValue(new Integer(1)));

    if(m1.containsKey("two")){

        int i = ((Integer)m1.get("two")).intValue();

        System.out.println(i);

    }   

    Map m3 = new HashMap(m1);

    m3.putAll(m2);

    System.out.println(m3);

}

}

Map的迭代(两种方法)

(1)Set<E>   keySet()

(2)Map中保存的是Entry

         Entry代表一对“键—值”对,它看上去是Map的一种属性

         Set<Map.Entry<String,String>> entrys = map.entrysSet();

         getKey(); 

 getValue();

示例代码:

public static void main(String[] args) {

  Map<String,String> map = new HashMap<String,String>();

  

  Set<Map.Entry<String,String>> entrys = map.entrySet();

  for(Iterator<Map.Entry<String,String>> i = entry.iterator();i.hasNext()) {

    Map.Entry<String,String> entry = map.entry();

  } 

}

 

7 Collections()

只对List有作用,里面提供了一些方法来对List进行操作

8增强for循环

for(int n:nums){}

 

缺点:不能方便地操作索引,只适用于简单的遍历

如果增强for循环里面的是迭代器,它会默认使用iterator()

9泛型

用来指定当前容器只能放置什么样的类型数据。

 

为什么会有泛型?

答:因为装入即集合的类型都被当做Object类型对待,从而失去自身的实际类型,当要恢复自身类型时,往往需要转型,这样做效率低,并且容易产生错误。

 

解决办法:

在定义集合的时候同时定义集合中对象的类型。

有两种指定方法:1.在定义Collection的时候指定;2.在循环时用Iterator指定。

泛型的好处:增强程序的可读性和稳定性。

 

泛型语法:

List<Person> List = new ArrayList<Person>

 

 

 

 

 

 

 

posted @ 2013-02-14 12:49  bod08liukang  阅读(152)  评论(0)    收藏  举报