集合重点知识总结

集合框架
ArrayList
Map
Set
泛型集合简介
集合的强大之处在于能够在进行AOP(面向切面编程)时在层与层之间包装、传递数据。JDK1.5以后引入的泛型,为集合提供了控制类型的功能。
集合框架
Collection
|---------List
|-------ArrayList,基于的是数组,随机访问和遍历效率高
|-------LinkList,基于链表,增加删除修改效率高
特有方法:addFirst、addLast、getFirst、getLast、removeFirst、removeLast

|--------Set
|-------HashSet
|-------TreeSet
|-------HashSet
Map
|-------TreeMap
|-------HashMap
|-------HashTable
Collections
@*@ArrayList 和 HashMap 着重掌握。
 
ArrayList
实现了Collection接口是线性集合,基于的是数组,随机访问和遍历效率高,先进先出、可以重复。


package info.itobin.list;   
  
import java.util.ArrayList;   
import java.util.List;   
  
//创建一个User示例类   
public class User {   
    private String name;   
  
    public String getName() {   
        return name;   
    }   
    public void setName(String name) {   
        this.name = name;   
    }   
}   
  
public class TestList {   
    public static void main(String[] args) {           
        List list = new ArrayList();   
        User u = null;   
        //存数据   
        for (int i = 0; i < 5; i++) {   
            u = new User();   
            u.setName("niit-"+i);   
            list.add(u);   
        }   
        System.out.println(list.size());   
           
        //取数据   
        for (int i = 0; i < list.size(); i++) {   
            u = (User)list.get(i);   
            System.out.println(u.getName());   
        }   
    }   
}  


以上代码需注意的几点:
1.第21行的User u = null;拿出来放在for循环之外而不是放在循环体内,可以提高内存利用率,不必在每次循环的时候定义一个引用变量,节约栈空间。
2.在未引入泛型集合的定义时,需要特别注意放入集合的类型,并且在从集合取数据的时候,一定要进行强制类型转换。
3.第24行的u = new User(); 一定要放到for循环体内,如果放在for循环前,则输出结果是5个niit-4。原因是:new出来的对象是一个,内存地址不会变化,for循环操作的对象就是一个,但是,每次循环都把地址赋值一次,所以,最终的结果是集合中有5个元素,并且指向同一块内存地址,所以5的值是相同的。
拓展:

问:判断输出结果是true还是false?

String a="hello";   
String b="hello";   
System.out.println(a==b);  


结果是true。因为a和b不是new出来的,所以没有重新开辟内存空间,两个的字符串是相同的,都是来源于同一个字符串池,所以a==b返回值为真。
 
Map

Map集合方法使用示例

import java.util.HashMap;   
import java.util.Map;   
  
public class Test {   
    public static void main(String[] args) {   
        Map map=new HashMap();   
        map.put("001","张三");   
        map.put("003", "里斯");   
        System.out.println(map.size());   
        map.put("001", "张三");   
        System.out.println(map.size());   
        //map集合中key不允许重复,   
        //如果重复则发生覆盖   
        //map中的key值允许为null,   
        //有且只有一个   
        map.put(null, "aaaa");   
        System.out.println(map.get(null));   
    }   
}  


以上代码需注意:
1.Map是键值对的集合,key不允许重复,value可以。
2.如果在put过程中key重复,则发生覆盖。
3.Map中的key允许为null,但是只能有一个,还是保证了key的不重复性。
 
Set
实现了Collection接口是线性集合,基于的是数组,按照哈希码排列,不是先进先出,不允重复。
如果在存入集合时出现重复,则最终还是一个元素,和数学中的集合有所类似。
因为Set不允许出现重复的元素,所以可以用这个特性来去除数组中重复元素,返回一个新的数组。



package info.itobin.list;   
  
import java.util.HashSet;   
import java.util.Iterator;   
import java.util.Set;   
  
public class TestSet {   
    public static void main(String[] args) {   
            Set set=new HashSet();   
            set.add("zhang san2");   
            set.add("ang san1");   
            System.out.println(set.size());   
            //set不支持以下标取值   
            /*
             * 第一种,转换为数组后再遍历  
             * Object[] objs=set.toArray();  
             * for(int i=0;i<objs.length;i++){  
             *   System.out.println(objs[i]);  
             * }  
            */  
            //第二种,迭代器(效率最高)   
            Iterator it=set.iterator();   
            while(it.hasNext()){   
                Object o=it.next();   
                System.out.println(o);   
            }   
    }   
}  


以上代码注意:
1.Set是按照哈希码来排列的,所以无法通过角标来取数据。
2.取数据两种方法
a.把Set集合放到数组里,遍历数组输出。
b.迭代器。这种效率最高。
 
泛型集合简介
1.可以在添加数据的同时,检测数据是否符合要求。
2.可以在取数据时,避免强制类型转换的麻烦。
 

posted @ 2016-05-19 08:08  会飞的小祥  阅读(123)  评论(0编辑  收藏  举报