Collection层级结构
Collection集合是所有集合的顶级,是所有集合的父接口。
集合:是用来保存一组数据的数据结构,定义了所有集合都应该包含的特征和行为。
派生出List接口和Set接口。
List接口
List接口:元素
可重复且有序
ArrayList:内部由一个数组实现,在需要的时候对数组进行扩容,索引数据快而插入数据慢,性能好,线程不安全,适合随机访问
Vector:与ArrayList类似,但是线程安全,性能较差
LinkedList:使用双向链表结构实现存储,按序号索引数据需向前后遍历,插入数据时只需记录本项的前后即可,插入速度快,更适合插入和删除(堆栈和队列)
遍历List
package testCollection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
//遍历list
public class TraverseList {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
System.out.println("方法一:迭代遍历+for");
for(Iterator iterator = list.iterator();iterator.hasNext();){
System.out.println(iterator.next());
}
System.out.println("方法二:迭代遍历");
Iterator iterator = list.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
System.out.println("方法三:增强型for循环");
for(String s:list){
System.out.println(s);
}
System.out.println("方法四:for循环");
for(int i=0; i<list.size();i++){
System.out.println(list.get(i));
}
}
}
Set接口
Set接口:元素
不可重复且无序(equals为false,最多有一个null元素)
HashSet:按照HashCode(散列算法实现),快速查找
TreeSet:二叉树算法实现,可从Set中提取有序的序列
遍历Set
package testCollection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class TraverseSet {
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
set.add("AAA");
set.add("BBB");
set.add("CCC");
System.out.println("方法一:迭代遍历");
Iterator iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
System.out.println("方法二:增强型for循环");
for(String s:set){
System.out.println(s);
}
}
}
Map层次结构
Map存储数据结构使用key-value键值对的形式存储数据,存储的数据
无序
对于map,要求
key必须唯一,value可以重复
获取数据时,使用key可获取对应的value
TreeMap:元素固定顺序,用TreeMap得到一个有序的结果,二叉树算法实现
HashTable:hash/rehash算法实现,线程安全,被HashMap代替
HashMap和HashTable的区别:
HashMap是HashTable的轻量级实现(非线程安全的实现),都实现了Map接口,采用的hash/rehash算法都大概一样,所以性能差异不是很大
区别:
1、历史原因:HashTable是基于陈旧的Dictionary类,而HashMap是java1.2引进的Map接口的一个实现
2、同步性:HashTable是线程安全的,即同步的,但是效率低;而HashMap是县城不安全的,不是同步的,效率高
3、值:只有HashMap可以让你将一个null作为key或者value
遍历Map
package testCollection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
public class TraverseMap {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("11", "aaa");
map.put("22", "bbb");
map.put("33", "ccc");
System.out.println("方法一:获取所有的key---keySet()");
Set<String> setKey = map.keySet();
Iterator iteratorKey = setKey.iterator();
while(iteratorKey.hasNext()){
System.out.println(map.get(iteratorKey.next()));
}
System.out.println("方法二:获取所有的value---values()");
for(String s:map.values()){
System.out.println(s);
}
System.out.println("*方法三:通过Map.entrySet遍历key和value");
for(Entry<String, String> entry:map.entrySet()){
System.out.println("key="+entry.getKey()+", value="+entry.getValue());
}
}
}