Collection集合和Map集合的区别:
Collection集合:每个元素可以存储一条信息,值。
Map集合:每个元素可以存储两条信息,键值对。
Collection:
该接口中的常用方法有:
Collection集合分为List集合、Set集合和Queue集合
List集合的特点:有序的集合,元素有下标,从0开始。可以存储重复的元素。
Set集合的特点:无序的集合。不可以存储重复的元素。
List:
List的实现类有ArrayList(最常用)、Vector、LinkedList
三者的区别为:
ArrayList采用数组的结构存储元素,查询比较快,增删改较慢。线程不安全,效率高。
Vector采用数组的结构存储元素,查询比较快,增删改较慢。线程安全,效率低。
LinkedList采用链表结构存储元素,查询较慢,增删改较快。线程不安全,效率高。
List集合的四种遍历方式:
①通过下标遍历
for (int i = 0; i < a.size(); i++) {
System.out.println(a.get(i));
}
②使用增强for
for(Object o : a){
System.out.println(o);
}
③使用迭代器Iterator
Iterator it = a.iterator();
while(it.hasNext()){
Object o = it.next();
System.out.println(o);
}
④用forEach方法遍历(Lamda表达式)
a.forEach((o)->{
System.out.println(o);
});
Set:
Set集合的实现类有HashSet(最常用)、TreeSet、LinkedHashSet
三者的区别:
HashSet:
不能保证元素的排列顺序,顺序有可能发生变化
线程不是同步的
集合元素可以是null,但只能放入一个null
根据元素的hashCode值来决定元素的存储位置
去重的方法:通过equals方法比较相等,并且两个对象的hashCode()值也相等。
TreeSet:
有序,支持定制排序
去重的方法:两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0
LinkedHashSet :
根据元素的hashCode值来决定元素的存储位置
遍历的时候是通过插入的顺序打印的
是链表结构
Set集合的遍历(因为Set是无序的,所以少了一种fori的方式,有三种)
①增强for
②Iteration
③forEach
Map:
该接口中的常用方法有:
Map集合的实现类有HashMap(最常用) 、HashTable 、 TreeMap
三者的区别:
HashMap:
允许使用 null 值和 null 键
HashTable:
不允许使用 null 值和 null 键
TreeMap:
允许使用null值、但不允许使用null键
三种常规Map性能:
HashMap:适用于在Map中插入、删除和定位元素。
HashTable:单线程环境下,性能低,适用于完全的线程安全。
Treemap:适用于按自然顺序或自定义顺序遍历键(key)。
总结:
HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap,仅在你需要完全的线程安全的时候使用Hashtable。
Map集合的遍历 有三种
①获取所有元素的值,以Collection集合返回
Collection vs = map.values();
vs.forEach((v)->{
System.out.println(v);
});
②用Map.Entry保存所有的键值对,保存到Set集合中遍历
Set set = map.entrySet();
for(Object o:set){
Map.Entry entry =(Map.Entry)o;
System.out.println(entry.getKey()+","+entry.getValue());
}
③找到所有的键,再通过键找值
Set ks1 = map.keySet();
for(Object k:ks1){
Object v = map.get(k);
System.out.println(k+"="+v);
}