目录
一、概述
二、集合是什么?
三、Collection/集合
四、ArrayList/数组列表
五、Iterator/迭代器
六、Set/无序集合/集
七、HashSet/散列集
八、LinkedHashSet
九、TreeSet/树集
十、List/列表
十一、 Map
所有集合类都位于java.util包下。集合中只能保存对象(保存对象的引用变量)。当我们把一个对象放入集合中后,系统会把所有集合元素都当成Object类的实例进行处理。
Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些接口或实现类。
Java集合类存放于 java.util 包中,是一个用来存放对象的容器。
注意:
Collection与Collections
集合类和数组不同,
Java的集合类由Collection接口和Map接口派生,
ArrayList底层有数组支持,通常作为默认首选;当程序频繁进行插入/删除操作时,选用LinkedLIst;如果元素数量固定,可选择真正数组/List/备选;
//我们这里将 ArrayList集合作为 Collection 的实现类
2 Collection collection = new ArrayList();
3
4 //添加元素
5 collection.add("Tom");
6 collection.add("Bob");
7
8 //删除指定元素
9 collection.remove("Tom");
10
11 //删除所有元素
12 Collection c = new ArrayList();
13 c.add("Bob");
14 collection.removeAll(c);
15
16 //检测是否存在某个元素
17 collection.contains("Tom");
18
19 //判断是否为空
20 collection.isEmpty();
21
22 //利用增强for循环遍历集合
23 for(Object obj : collection){
24 System.out.println(obj);
25 }
26 //利用迭代器 Iterator
27 Iterator iterator = collection.iterator();
28 while(iterator.hasNext()){
29 Object obj = iterator.next();
30 System.out.println(obj);
31 }
Collection 接口的 iterator() 方法返回一个 Iterator。
public interface Iterable { // Iterable泛型接口
Iterator iterator(); // 由继承接口的集合类负责实现,返回一个迭代器
}
Set集合中对象不可重复,因此当试图添加两个相同元素时,add()方法返回false/元素不可加入;
Set集合中对象必须重写hashCode()方法和equals()方法;
Set最大的特性就是不允许在其中存放的元素是重复的
Set set1 = new HashSet();
if(set1.add("a"))
{
System.out.println("OK");
}
if (set1.add("a")) {
System.out.println("OK2");
}
else
{
System.out.println("BAD2");
}
set1.add("000");
set1.add("111");
set1.add("222");
System.out.println("集合set1的内容:"+set1);
System.out.println("集合set1的大小:"+set1.size());
set1.remove("000");
System.out.println("集合set1的内容:"+set1);
System.out.println("集合set1中是否包含000 :"+set1.contains("000"));
System.out.println("集合set1中是否包含111 :"+set1.contains("111"));
Set set2=new HashSet();
set2.add("111");
set2.addAll(set1);//将set1 集合中的元素全部都加到set2中
System.out.println("集合set2的内容:"+set2);
Iterator iterator = set1.iterator();//得到一个迭代器
while (iterator.hasNext()) {//遍历
String element =(String) iterator.next();
System.out.println("iterator = " + element);
}
//将集合set1转化为数组
Object s[]= set1.toArray();
for(int i=0;i
Set set1 = new HashSet();
Set set2 = new LinkedHashSet();
for(int i =0 ; i<5 ;i++)
{
int s = (int)(Math.random()*100);
set1.add(new Integer(s));
set2.add(new Integer(s));
System.out.println("第 "+i+" 次随机数产生为:"+s);
}
System.out.println("未排序前HashSet:"+set1);
System.out.println("未排序前LinkedHashSet:"+set2);
//使用TreeSet来对另外的Set进行重构和排序
Set sortedSet = new TreeSet(set1);
System.out.println("排序后 TreeSet :"+sortedSet);
HashSet的子类,LinkedHashSet也是根据元素的hashCode值决定其存储位置;
同时使用链表维护元素的添加次序—>性能略低于HashSet的性能;
TreeSet实现SortSet接口,
TreeSet采用红黑树(red-black tree)存储集合元素,排序规则支持自然排序/定制排序;
TreeSet存储对象必须实现Comparable接口
Java中所有链表底层都是双向链接(doubly linked);
List额外提供listIterator()方法,该方法返回一个ListIterator对象,用于遍历List;
ListIterator的set(obj)方法用新元素obj覆盖next()/previous()返回的上一个元素,可以双向移动;
方法:
数学中的映射关系在Java中就是通过Map来实现的。它表示,里面存储的元素是一个对(pair),我们通过一个对象,可以在这个映射关系中找到另外一个和这个对象相关的东西。
HashMap hm = new HashMap();
//试图将2个key为null的key-value对放入HashMap中
hm.put(null , null);
hm.put(null , null);
//将一个value为null的key-value对放入HashMap中
hm.put("a" , null);
hm.put("a" , "b");
//输出Map对象
System.out.println(hm);