Collection 接口。
List集合
List接口,继承Collection接口,因此包含Collection中的所有方法;此外,List接口还定义了两个非常重要的方法:
get(int index):获得指定索引位置的元素。
set(int index,Object obj):将集合中指定索引的对象修改为指定的对象。
List 接口的实现类有ArrayList与LinkedList。
其中ArrayList类实现了可变数组,允许保存所有元素,包括null,并可以根据索引位置对集合进行快速的随机访问;缺点是向指定的索引位置插入对象或删除对象的速度较慢。
LinkedList类采用链表结构保存对象。这种结构的优点是便于向集合中插入和删除对像,需要向集合中插入、删除对象时,使用LinkedList类实现List集合的效率较高;但对于随机访问集合中的对象,使用LinkedList类实现List类集合效率较低。
(与数组相同,集合的索引也是从0开始)
Set集合继承Collection集合(不重复,不排顺序)
Set接口的实现类有HashSet类和TreeSet类。
HashSet类实现Set接口,由哈希表支持。它不保证Set的迭代顺序,特别是它不保证该顺序恒久不变。此类允许使用null元素。
HashSet特点:
1:HashSet 不是同步的,如果多个线程同时访问一个HashSet,如果有2条或者2条以上线程
同时修改了HashSet集合,必须通过代码来保证同步。
2:HashSet不能保证元素的排列顺序,顺序可能有变化。
3:集合元素值可以是null
TreeSet类不仅实现了Set接口,还实现了java.util.SortedSort接口,因此,TreeSet类实现的Set集合在遍历集合时按照自然顺序递增排序,也可按照指定比较器递增排序,既可以通过比较器对用TreeSet类实现的Set集合中的对象进行排序。
其中,TreeSet类中新增的方法:
first():返回此Set中当前第一个元素;
last():返回此Set中当前最后一个元素;
comparator()返回对此Set中的元素进行排序的比较器。如果此Set使用自然顺序,则返回null;
headSet(E toElement):返回一个新的集合,新集合包含toElement(不包含)之前的所有对象;
subSet(E fromElement,E fromElement):返回一个新的集合,包含fromElement(包含)对象与fromElement(不包含)对象之间的所有对象;
taliSet(E fromElement)返回一个新的Set集合,新集合包含对象fromElement(包含)之后的所有对象。
Map集合没有继承Collection接口
Map接口提供了将key映射到值的对象。一个映射不能包含重复的key,每个key最多只能映射到一个值。
常用方法:
put(K key,V value):向集合添加指定的key与value的映射关系;
containsKey(Object key):如果此映射包含指定的key的映射关系,则返回true;
containsValue(Object Value):如果此映射将一个或多个key映射到指定值,则返true;
get(object key):如果存在指定的key对象,则返回该对象对应的值,否则返回null;
keySet():返回该集合中所有key对象所形成的Set集合;
values():返回该集合中所有值对象形成的Collection集合;
Mao接口的实现类
HashMap类于TreeMap类;
HashMap类是基于哈希表的Map接口的实现,此实现提供所有可选的映射操作,并允许使用null值和null键,但必须保证键的唯一性。HashMap通过哈希表对其内部的映射关系进行快速的查找,此类不保证映射顺序,特别是它不保证该顺序恒久不变。
TreeMap类不仅实现了Map接口,还实现了java.util.SortedMap接口,因此集合有一定的顺序,不允许对象是null;
遍历集合可以用forerach,例如:
package demo_1;
import java.util.Collection;
import java.util.HashSet;
public class Foreach {
public static void main(String[] args) {
// TODO Auto-generated method stub
Collection books = new HashSet();
books.add(new String ("当兵"));
books.add(new String("军训"));
books.add(new String("召号在前方"));
boolean bo = books.add(new String("军训"));//HashSet不允许重复对象
for(Object obj : books){
String book = (String)obj;
System.out.println(book);
if(book.equals("军训")){
//下面代码会引发ConcurrentModificationException异常
//books.remove(book);
}
}
System.out.println(books);
System.out.println(bo);
}
}
也可用迭代器:
利用Iterator 迭代器来遍历集合:
package demo_1;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
public class Die {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个集合
Collection books = new HashSet();
books.add("打起精神");
books.add("强健体魄");
books.add("报效祖国");
//获取books 集合的迭代器
Iterator it = books.iterator();
while(it.hasNext()){
//it.next()方法返回数据的是object类型,需要强制类型转换
String book = (String)it.next();
System.out.println(book);
if(book.equals("强健体魄")){
//从集合
it.remove();
/*books.remove(book);//在多线程编程时尤其容易发生错误:
程序的一条线程正在迭代访问Collection集合元素时,
另一条线程修改了Collection集合,这就导致发生异常
*/
}
book = "测试字符串";
}
System.out.println(books);
}
}