Java Collection集合框架&Map
Map接口
+Map接口(没有重复的key,出现重复的key,则value会被覆盖)
-HashMap类(除了“不同步”和“允许空的Key/Value”之外,与HashTable大致相同)
-LinkedHashMap(在HashMap的基础上,能够保证输出的顺序和输入的相同)
-HashTable类(实现同步,线程安全,不允许空值,效率相对较低)
+SortedMap接口
-TreeMap类(底层用“红黑树”实现,保证元素有序)
+Collection接口
+List接口
-ArrayList类(数组实现的List)
-LinkedList类(双链表实现的List,经常用作堆栈、队列或者双向队列)
-Vector类(数组实现的List,支持线程同步)
+Queue接口
-不常用
+Set接口
-HashSet类
-LinkedHashSet类(以链表维护元素插入顺序)
+SortedSet接口
-TreeSet类
1.Collection接口常用方法
add(),addAll(),clear(),equals(),
size(),toArray(),isEmpty()
Collection没有get()方法,只能通过iterator()来遍历元素
2.List接口自己在Collection的基础上添加了indexOf()方法
3.LinkedList类常用方法:
offer(E e):在列表尾部插入一个元素
offerFirst(E e):在列表front插入一个元素
peek():返回列表第一个元素(不删除)
peekFirst():返回列表第一个元素(列表为null,则返回null)(不删除)
peekLast():返回列表最后一个元素(同上)
poll():返回并删除第一个元素
pollFirst():与peekFirst类似
pollLast():返回并删除最后一个元素
pop():用作栈时常用方法,返回栈顶元素
push():压入栈
4.Collections类和Arrays类
Arrays类是一个专门用来操作数组的工具类,有一组static的方法,对数组进行排序查找等操作
equals(),fill(),sort(),binarySearch()
Array类的length属性,只能判断array的容量,不能判断其中真实存有多少元素
Example:
int arr[] = {1,2,3} System.out.print(arr.length)//打印结果为3
int arr[] = new int[10] System.out.print(arr.length)//打印结果为10
Collections类似Arrays,针对集合的一个工具类,也提供一系列静态方法
ArrayList和Vector的区别
* ArrayList在内存不够时默认是扩展50% + 1个,Vector是默认扩展1倍 * vector支持indexOf(obj, start)方法,ArrayList不支持 * vector线程安全,系统开销大
2.Map的遍历方法
//第一种遍历:推荐 Map<Integer,Integer> map = new HashMap<Integer,Integer>(); for(MapEntry<Integer,Integer> entry:Map.entrySet()){ int key = entry.getKey(); int value = entry.getValue(); }
//在for-each循环中遍历keys或values Map<Integer,Integer> map = new HashMap<Integer,Integer>(); for(Integer key:Map.keySet()){ System.out.print(key); }
//使用迭代器iterator Map<Integer,Integer> map = new HashMap<Integer,Integer>(); Iterator<Map.Entry<Integer,Integer>> entries = map.entrySet().iterator(); while(entries.hashNext()){ Map.Entry<Integer,Integer> entry = entries.next(); int key = entry.getKey(); int value = entry.getValue(); }
//遍历所有value Map<Integer,Integer> map = new HashMap<>(); for(Integer v : map.values()) { System.out.println("value= " + v); }