集合重点知识总结
集合框架
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.可以在取数据时,避免强制类型转换的麻烦。