1. Iterator
1.1 注意事项
接口的remove方法将删除上次调用next方式时返回的对象,即:remove之前,必须有next(先获取,再删除)。
1.2 例一:删除字符串集合中的第一个元素
Iterator it = c.iterator();//c是一个集合类的实例
it.next();
it.remove();
1.3 例二:删除两个连续的元素
Iterator it = c.iterator();//c是一个集合类的实例
it.next();
it.remove();//删除第一个元素
it.next();
it.remove();//删除第二个元素
2.类的层次结构设计模式步骤
2.1Interface(提供所有需要的方法名称)
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 list = new ArrayList();
list.add("Tom");
list.add("Jack");
list.add("Mike");//ListIterator里面有add()方法在某个位置添加元素
ListIterator 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.1Vector类:线程同步,可以由两个线程安全地访问一个Vector对象;(建议多线程时使用)
6.2ArrayList类:线程不同步,在单线程情况下,使用效率高。(建议单线程时使用)
7. TreeSet
7.1 TreeSet排序原理
TreeSet排序是用树结构完成的(当前实现使用的是红黑树)
7.2 TreeSet和HashSet的比较
将一个元素添加到TreeSet中要比添加到HashSet中慢,但是TreeSet可以对元素自动排序(按字母顺序排序)。
8. PriorityQueue(优先级队列)
8.1 含义
以任意的顺序插入数据,无论何时调用remove()方法,总会获取当前队列(已实现自动排序)中的最小元素。
8.2 用途
使用优先级队列的典型示例是任务调度。每一个任务都有一个优先级,每次启动一个新的任务时,都会从队列中移除优先级最高的任务(通常设置1的优先级最高)。
8.3 示例
PriorityQueue queue = new PriorityQueue();
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 map = new HashMap();
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 list1 =Arrays.asList(nums);
list1.add(8);//Exception in thread "main" java.lang.UnsupportedOperationException
11. 集合的排序方法
11.0 附表(创建示例列表)
List strList = new ArrayList();
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 list = new ArrayList();
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(" ");
}