参考资料总结出来的!
集合框架是为表示和操作集合而规定的一种统一的标准的体系结构
Collection 接口存储一组不唯一,无序的对象
List 接口存储一组不唯一,有序(插入顺序)的对象
Set 接口存储一组唯一,无序的对象
(List基本上都是以Array为基础。但是Set则是在HashMap的基础上来实现的,这个就是Set和List 的 根本区别。HashSet的存储方式是把HashMap中的Key作为Set的对应存储项)
Set总结:
1. Set实现的基础是Map(HashMap);
2. Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对 象
HashCode的作用
hashset传统比较方法是不能重复元素的,hashset本身就是采用哈希算法的对象集合,所以在新加进一个元素的时候会对原有元素进行循环遍历比较,HashCode每个对象都有一个哈希吗的存在,所以HashCode可以返回每个对象的哈希吗。分成若干个区域,系统自动把对象的哈希吗放到所对应的那个区域,从而达到提高效率的查找!
ArrayList 和 LinkedList的区别
ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机 访问元素的效率比较高
LinkedList采用链表存储方式。插入、删除元素时效率比较高
Vector和ArrayList的异同
同:实现原理相同,功能相同,很多情况下可以互用
两者的主要区别如下
1.Vector线程安全,ArrayList重速度轻安全,线程非安全(前者只能一个线程对其进行操作,后者可以多线程,所以效率较高但不安全)
2.长度需增长时,Vector默认增长一倍,ArrayList增长50%
Hashtable和HashMap的异同
同:实现原理相同,功能相同,在很多情况下可以互用
两者的主要区别如下
1.Hashtable继承Dictionary类,HashMap实现Map接口
2.Hashtable线程安全,HashMap线程非安全
3.Hashtable不允许null值,HashMap允许null值
---实例一代码
package com.osekj.music;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Person p1=new Person();
p1.setName("张云和");
p1.setAge(16);
Person p2=new Person();
p2.setName("郭凡");
p2.setAge(12);
/*//list集合使用-ArrayList
List pList=new ArrayList();
pList.add(p1);
pList.add(p2);
//单个取
Person temp=(Person)pList.get(0);
//System.out.println(temp.getName());
//删除
pList.remove(0);
//遍历取
for (Object person : pList) {
Person t=(Person)person; //强制类型转换
System.out.println(t.getName());
}
//list集合使用-ArrayList<E>
List<Person> peList=new ArrayList<Person>();
peList.add(p1);
peList.add(p2);
//单个取
System.out.println(peList.get(0).getName());
//遍历取
for (Person person : peList) {
if (person.getName().equals("张云和")) {
System.out.println("有了");
}
}
//判断是否存在
if (peList.contains(p1)) {
System.out.println("确实有了");
}
//list集合使用-LinkedList
LinkedList<Person> plinkedlist=new LinkedList<Person>();
plinkedlist.addFirst(p1);
plinkedlist.addFirst(p2);
//单个取 --栈数据结构
System.out.println(plinkedlist.getFirst().getName());
//单个移除
plinkedlist.removeFirst();
System.out.println(plinkedlist.getFirst().getName());
plinkedlist.removeFirst();
//模拟队列数据结构
plinkedlist.addLast(p1);
plinkedlist.addLast(p2);
System.out.println(plinkedlist.getFirst().getName());
//plinkedlist.removeFirst();
System.out.println(plinkedlist.getFirst().getName());
//plinkedlist.removeFirst();
//遍历
for (Person person : plinkedlist) {
System.out.println(person.getName());
}*/
//map-HashMap<k, v>
/*Map<String, Person> pMap=new HashMap<String, Person>();
pMap.put("zyh", p1);
pMap.put("gf", p2);
//单个取
System.out.println(pMap.get("gf").getName());
//遍历键
for (String k : pMap.keySet()) {
System.out.println(k);
}
//遍历值
for (Person p : pMap.values()) {
System.out.println(p.getName());
}
//遍历键-值
for (Entry<String, Person> e : pMap.entrySet()) {
System.out.println(e.getKey()+":"+e.getValue().getName());
}
//查看有无此键
if (pMap.containsKey("gf")) {
System.out.println("在");
}
*/
Set<Person> persons=new HashSet<Person>();
persons.add(p1);
persons.add(p2);
//新的遍历
for (Person person : persons) {
System.out.println(person.getName());
}
//老的迭代遍历
Iterator<Person> it= persons.iterator();
while (it.hasNext()) {
System.out.println(it.next().getName());
}
}
}