Collection——————接口
├List————————接口
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set————————接口
Map—————————接口
├Hashtable
├HashMap
└WeakHashMap
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。collection接口又分为list和set接口
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
List
List: 有顺序的,元素可以重复
遍历:for 迭代
排序:Comparable Comparator Collections.sort()
ArrayList:底层用数组实现的List
特点:查询效率高,增删效率低 轻量级 线程不安全
ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚至于ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。
LinkedList:底层用双向循环链表 实现的List
特点:查询效率低,增删效率高
Vector: 底层用数组实现List接口的另一个类
特点:重量级,占据更多的系统开销 线程安全
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
SETSet:无顺序的,元素不可重复(值不相同)
遍历:迭代
排序:SortedSet
HashSet:采用哈希算法来实现Set接口
唯一性保证:重复对象equals方法返回为true
重复对象hashCode方法返回相同的整数
不同对象 哈希码 尽量保证不同(提高效率)
TreeSet:在元素添加的同时,进行排序。也要给出排序规则
唯一性保证:根据排序规则,compareTo方法返回为0,就可以认定两个对象中有一个是重复对象。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Map:元素是键值对 key:唯一,不可重复 value:可重复遍历:先迭代遍历key的集合,再根据key得到value
HashMap:轻量级 线程不安全 允许key或者value是null
集合的遍历:
List<String> list = new ArrayList<String>();
list.add("testone");
list.add(“testtwo”);
第一种:
for(Iterator<String> it = list.iterator();it.hasNext();){
....
}
这种方式在循环执行过程中会进行数据锁定,性能稍差,同时,如果你想在寻欢过程中去掉某个元素,只能调用
it.remove方法,不能使用list.remove方法, 否则一定出现并发访问的错误.
第二种:
for(String data :list){
.....
}
内部调用第一种,换汤不换药,因此比Iterator慢,这种循环方式还有其他限制, 不建议使用它。
第三种:
for(int i=0;i<list.size();i++){
A a = list.get(i);
...
}
内部不锁定,效率最高,但是当写多线程时要考虑并发操作的问题。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Map<String,String> map=new HashMap<String,String>();
map.put("username", "qq");
map.put("passWord", "123");
第一种用for循环
for(Map.Entry<String, String> entry:map.entrySet()){
System.out.println(entry.getKey()+"--->"+entry.getValue());
}
第二种用迭代
Set set = map.entrySet();
Iterator i = set.iterator();
while(i.hasNext()){
Map.Entry<String, String> entry1=(Map.Entry<String, String>)i.next();
System.out.println(entry1.getKey()+"=="+entry1.getValue());
}
用keySet()迭代
Iterator it=map.keySet().iterator();
while(it.hasNext()){
String key;
String value;
key=it.next().toString();
value=map.get(key);
System.out.println(key+"--"+value);
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Set类型遍历
1.迭代遍历:
Set<String> set = new HashSet<String>();
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String str = it.next();
System.out.println(str);
}
2.for循环遍历:
for (String str : set) {
System.out.println(str);
}
***********************************************
优点还体现在泛型 假如 set中存放的是Object
Set<Object> set = new HashSet<Object>();
for循环遍历:
for (Object obj: set) {
if(obj instanceof Integer){
int aa= (Integer)obj;
}else if(obj instanceof String){
String aa = (String)obj
}
........
注意:Map的遍历是把map转为set再进行遍历,map.entyset()。