java核心卷轴之集合
1. Iterator
1.1 注意事项
接口的remove方法将删除上次调用next方式时返回的对象,即:remove之前,必须有next(先获取,再删除)。
1.2 例一:删除字符串集合中的第一个元素
Iterator<String> it = c.iterator();//c是一个集合类的实例 it.next(); it.remove();
1.3 例二:删除两个连续的元素
Iterator<String> it = c.iterator();//c是一个集合类的实例 it.next(); it.remove(); //删除第一个元素 it.next(); it.remove();//删除第二个元素
2. 类的层次结构设计模式步骤
2.1 Interface(提供所有需要的方法名称)
2.2 AbstractClass(实现通用的方法,其他方法使用抽象方法)
2.3 Class(实现抽象方法)
3. Java类库中的具体集合
接口 |
集合类型 |
描述 |
Collection |
ArrayList |
一种可以动态增长和缩减的索引序列 |
LinkedList |
一种可以高效插入和删除的有序序列 |
|
ArrayDeque |
一种用循环数组实现的双端队列 |
|
HashSet |
一种无重复元素的无序集合 |
|
EnumSet |
一种包含枚举类型值的集合 |
|
LinkedHashSet |
一种无重复元素的有序(插入顺序)集合 |
|
PriorityQueue |
一种允许高效删除最小元素的集合 |
|
Map |
HashMap |
一种存储键值对的映射表 |
TreeMap |
一种存储有序键值对的映射表 |
|
EnumMap |
一种键值属于枚举类型的映射表 |
|
LinkedHashMap |
一种存储键值对的有序(插入顺序)映射表 |
|
WeakHashMap |
一种值不被使用后可以被垃圾回收器回收的映射表 |
|
IdentityHahMap |
一种用==而不是用equals比较键值的映射表 |
4. 链表
在Java中,所有链表实际上都是双向链接的(即:双向链表)。
5. 在集合的固定位置添加元素
5.1 在指定元素后面添加新的元素
List<String> list = new ArrayList<String>(); list.add("Tom"); list.add("Jack"); list.add("Mike"); // ListIterator里面有add()方法在某个位置添加元素 ListIterator<String> it = list.listIterator(); while(it.hasNext()){ //在jack的后面添加元素 if(it.next().equals("Jack")){ it.add("Joe"); } } for (String string : list) { System.out.println(string); }
6. Vector类和ArrayList类
6.1 Vector类:线程同步,可以由两个线程安全地访问一个Vector对象;(建议多线程时使用)
6.2 ArrayList类:线程不同步,在单线程情况下,使用效率高。(建议单线程时使用)
7. TreeSet
7.1 TreeSet排序原理
TreeSet排序是用树结构完成的(当前实现使用的是红黑树)
7.2 TreeSet和HashSet的比较
将一个元素添加到TreeSet中要比添加到HashSet中慢,但是TreeSet可以对元素自动排序(按字母顺序排序)。
8. PriorityQueue(优先级队列)
8.1 含义
以任意的顺序插入数据,无论何时调用remove()方法,总会获取当前队列(已实现自动排序)中的最小元素。
8.2 用途
使用优先级队列的典型示例是任务调度。每一个任务都有一个优先级,每次启动一个新的任务时,都会从队列中移除优先级最高的任务(通常设置1的优先级最高)。
8.3 示例
PriorityQueue<Integer> queue = new PriorityQueue<Integer>(); queue.add(3); queue.add(5); queue.add(2); queue.add(1); while(!queue.isEmpty()){ System.out.println(queue.remove()); //1 2 3 5 }
9. Map
9.1 Map的put()方法返回用这个键参数存储的上一个值
9.2 示例
Map<String, String> map = new HashMap<String, String>(); String s = map.put("Hello", "Hello"); String ss = map.put("Hello", "hello"); System.out.println(s);//null System.out.println(ss);//Hello
10. 视图对象
10.1 含义
视图对象是指有限制的集合对象。
10.2 示例
list1就是一个试图对象,带有访问底层数组的get/set方法,但是不能改变原有数组的 长度(例如:与迭代器相关的add和remove方法),否则会抛出异常java.lang.UnsupportedOperationException
Integer[] nums = new Integer[]{1,2,3,4,5}; List<Integer> list1 = Arrays.asList(nums); list1.add(8);//Exception in thread "main" java.lang.UnsupportedOperationException
11. 集合的排序方法
11.0 附表(创建示例列表)
List<String> strList = new ArrayList<String>(); strList.add("a"); strList.add("b"); strList.add("c");
11.1 升序排序
Collections.sort(strList);
11.2 降序排序
Collections.sort(strList,Collections.reverseOrder());
11.3 备注
Collections是一个静态工具类,里面封装了很多集合的处理函数。
12. 二分法查找(Collections.binarySearch())
12.1 返回参数
如果binarySearch返回的数字大于等于0,则返回的数值表示匹配对象的索引;若返回的是负值,则表示元素不存在。可以利用返回的负值将元素插入集合中的正确位置。
12.2 示例
List<String> list = new ArrayList<String>(); list.add("1"); list.add("3"); list.add("5"); list.add("7"); list.add("9"); int index = Collections.binarySearch(list, "4");//index : -3 if(index < 0){ list.add(-index-1, "4"); } for (String string : list) {//1 3 4 5 7 9 System.out.print(string); System.out.print(" "); }
更多内容,请访问:http://www.cnblogs.com/BlueStarWei/