1,集合类
包含:set、list、map、queue四大体系。其中set代表无序、不可重复的集合;list代表有序、可重复的集合。map代表具有映射关系的集合;queue代表队列集合。
Java集合类与数组的区别:Java的集合类的长度是动态的,数组则是固定长度的。
List、Set、Map接口及各实现类的特性
接口 | 特性 | 实现类 | 实现类特性 | 成员要求 |
List | 线性、有序的存储容器,可通过索引访问元素 | ArrayList | 数组实现。非同步。 |
|
Vector | 类似ArrayList,同步。 |
| ||
LinkedList | 双向链表。非同步。 |
| ||
Map | 保存键值对成员 | HashMap | 基于哈希表的 Map 接口的实现,满足通用需求 | 任意Object对象,如果修改了equals方法,需同时修改hashCode方法 |
TreeMap | 默认根据自然顺序进行排序,或者根据创建映射时提供的 Comparator进行排序 | 键成员要求实现caparable接口,或者使用Comparator构造TreeMap。键成员一般为同一类型。 | ||
LinkedHashMap | 类似于HashMap,但迭代遍历时取得“键值对”的顺序是其插入顺序或者最近最少使用的次序 | 与HashMap相同 | ||
IdentityHashMap | 使用==取代equals()对“键值”进行比较的散列映射 | 成员通过==判断是否相等 | ||
WeakHashMap | 弱键映射,允许释放映射所指向的对象 |
| ||
ConcurrentHashMap | 线性安全的Map |
| ||
Set | 成员不能重复 | HashSet | 为快速查找设计的Set | 元素必须定义hashCode() |
TreeSet | 保持次序的Set,底层为树结构 | 元素必须实现Comparable接口 | ||
LinkedHashSet | 内部使用链表维护元素的顺序(插入的次序) | 元素必须定义hashCode() |
2,List
特有方法:
(1)增加
void add(int index, E element):在列表的指定位置插入指定元素(可选操作)。
boolean addAll(int index, Collection<? extends E> c):将指定 collection中的所有元素都插入到列表中的指定位置(可选操作)。
(2)删除
boolean remove(Object o):从此列表中移除第一次出现的指定元素(如果存在)(可选操作)。
(3)修改
E set(int index, E element):用指定元素替换列表中指定位置的元素(可选操作)。
(4)查询
E get(int index):返回列表中指定位置的元素。
List<E> subList(int fromIndex, int toIndex):返回列表中指定的fromIndex(包括 )和toIndex(不包括)之间的部分视图。
ListIterator<E> listIterator():返回此列表元素的列表迭代器(按适当顺序)。
List集合特有迭代器:ListIterator是Iterator的子接口。在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会发生ConcurrentModificationException异常。所以,在迭代时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,只能对元素进行判断,取出和删除的操作。如果想要其他的操作如添加、修改等,就需要使用其子接口ListIterator,该接口只能通过List集合的ListIterator方法获取。
运行示例:
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add("java0");
al.add("java1");
al.add("java2");
al.add("java3");
sop("原集合是:"+al);
//演示列表迭代器
ListIterator li = al.listIterator();
while(li.hasNext()){
Object o = li.next();
if(o.equals("java2"))
li.set("java5");
}
sop("修改后集合是:"+al);
}
public static void sop(Object obj){
System.out.println(obj);
}