JAVA学习笔记——JAVA基础语法(六)

Collection容器

1、首先我们要了解为什么JAVA中要有容器?

  我们知道数组的长度一旦指定,程序在执行过程中就不能改变,正是因为数组有这样的缺陷,所以才出现就(collection)容器,容器的大小可以任意改变,容器的大小就是根据你实际放入了多少的数据而相应的变大。

2、容器中包括Set  和List,那么他们有什么区别呢?

  Set是无序唯一的,底层是用Map实现的;List是有序不唯一的,底层是数组,所以可以用索引来得到值

  注意:在list中删除数据时,当删除的是里面的整数数据类型时要知道使用包装类型进行删除,我们要知道JAVA会自动装箱和拆箱  但是在Set就不需要使用包装类型来删除,因为Set中没有索引

3、List又分为Arrylist和LinkedList,他们之间又有什么区别呢?各适用于什么情况呢?

  ArrayList(数组)的内存地址连续,这个容器中的数据是经常用来查找的;LinkedList(链表)内存地址不连续,这个容器中的数据经常用来更新

4、Iterator(容器的迭代器)

  所有实现了Collection接口的类都有一个iterator方法,这个方法会得到一个实现了Iterator的类的对象;List虽然有索引,但是也可以使用JAVA5.0以后出来的增强for循环,其实就相当于.Net中的foreach(),但是因为不能方便的操作索引,只用于简单的遍历,如果增强的for循环迭代的是容器的话内部默认的也是使用的Iterator迭代器实现的。但是也必须要使用迭代器来实现,因为这是唯一县城安全的方法

5、Collections类

  该类提供了一系列的方法来对List进行操作,比如说我们自己写的类要进行比较大小或者是排序,那么和它相关的一切规则需要我们自己来定义,比如比较对象是否相等或者是判断大小的规则,如果是要实现比较大小的类一定要实现Comparable接口然后重写public int compareTo(Object o)方法,为了更美观的输出到控制台上也建议重写public String toString()方法

   如下程序调用collections类中的sort方法对list进行排序,在自己写的类当中规定好排序的方法:

 1 import java.util.*;
 2 
 3 public class test{
 4          public static void main(String[] args){
 5 
 6                    List<Person> list = new ArrayList<Person>();
 7                    list.add(new Person("jack",23));
 8                    list.add(new Person("tom",19));
 9                    list.add(new Person("rose",22));
10                    list.add(new Person("mack",21));
11                    list.add(new Person("twins",34));      
12 
13                    Collections.sort(list);  //因为该方法是静态的所以可以直接使用  类名.方法名 直接调用
14                    System.out.println(list);
15          }       
16 }
17 
18 class Person implements Comparable{
19 
20          public Person(String name,int age){
21                    this.name = name;
22                    this.age = age;
23          }
24          String name;
25          int age;
26          public String toString(){
27                    return "name "+this.name +" age:"+this.age ;
28          }
29          public int compareTo(Object o){
30                    Person p = (Person)o;
31                    if(this.age > p.age){
32                      return 1;
33                    }else if(this.age < p.age){
34                             return -1;
35                    }else{
36                            return 0;
37                    }
38 
39          }
40 
41 }

  6、JAVA5.0之后出现的泛型

  概念:指定当前的容器中只能放置什么样的类型,并且泛型中没有父类的引用指向子类的对象

7、容器中为什么会出现Map?

  因为Set是无序的,唯一的,hashSet没有索引,不方便通过索引来对容器进行操作,所以出现了Map,所以Map就是可以创建索引,而且这个索引还是自己定义的。Map是以Key-value(键-值)对的形式来保存数据的,添加数据是使用Map.put( index,value);index是自定义的类型,可以是自己规定的;获取数据是使用Map.get(index) 其实Map就相当于List只是Map是添加了索引的功能

  Map的迭代方法有两种:

  1)、先使用map.keySet()方法获得map里面的所有Key值封装成Set类型,然后再使用set的iterator迭代器来进行迭代,获得key值就可以获得value值  如下代码:

import java.util.*;

public class test{

public static void main(String[] args){        

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

          map.put("1","zhong");
          map.put("2","ke");
          map.put("3","wen");
          map.put("4","good");
          map.put("5","night !!");
          Set<String> set = map.keySet();

          for(Iterator i = set.iterator();i.hasNext();){

                    String key = (String)i.next();

                    System.out.println(map.get(key));

          }

}       

}

 

  2)、使用Map中的EntrySet方法来获得键值对Entry,包装成Set试图在使用Set中的Iterator方法进行迭代。Entry代表的是一对key-value,我们可以把他看成是Map的属性(成员变量)

  如下代码所示:

import java.util.*;

public class test{

public static void main(String[] args){       

          Map<String,String> map = new HashMap<String,String>();
          map.put("1","zhong");
          map.put("2","ke");
          map.put("3","wen");
          map.put("4","good");
          map.put("5","night !!");
           Set<Map.Entry<String,String>> entrys = map.entrySet();
          for(Iterator<Map.Entry<String,String>> i = entrys.iterator();i.hasNext();){

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

                    System.out.println(entry.getValue());

          }

    }       
}

 

 

 

posted @ 2013-01-31 20:53  bod08zhongkewen  阅读(340)  评论(3编辑  收藏  举报