首页 > 代码库 > 集合框架

集合框架

1 集合类的由来

   对象用于封装特有数据,对象多了就需要存储,如果对象的个数不确定,就使用集合容器进行存储。

 

 

集合特点:

1 用于存储对象的容器

2 集合的长度是可变的。

3 集合中不可以存储基本类型值

4 集合装的全是引用

 

 

 

2  集合体系

集合容器因为内部的数据结构不同,有多种具体容器

不断的向上抽取,就形成了集合框架

 

框架的顶层:collection接口

 

Collection的常见方法

 

1 添加

 

2 删除

 

3 判断

 

4 获取   

 

Iterator iterator() 去除元素的方式 :迭代器  

该对象必须依赖于具体容器,因为每一个容器,因为每一个容器具体的数据结构都不同

所以该迭代器对象是在容器内部实现的

对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可。

也就是Iterator方法

 

Iterator接口就是对所有的Collcetion容器进行取出的公共接口。

 

   

 

5 其他

 

取交集  boolean retainAl(Collection coll)

 

Object[] toArray()  将集合转成数组、

 

具体方法查阅API

 

 

 

  

3 ArrayList()  //数据结构为数组,元素可以重复  而且有序

import java.util.ArrayList;

import java.util.Collection;

 

public class CollectionDemo {

  public static void main(String[] args) {

Collection coll=new ArrayList();

 

show(coll);

}

 

private static void show(Collection coll) {

 

//1 添加元素

coll.add("abc1");

coll.add("abc12");

coll.add("abc12");

coll.add("abc13");

 

//2 删除元素

coll.remove("abc12");

 

 

//3 清空集合

 

//coll.clear();

 

coll.contains("abc4");

System.out.println(coll);

}

}

更多集合方法 请查阅API

 

 

重点方法 获取:迭代器方法

 

import java.util.ArrayList;

import java.util.Collection;

import java.util.Iterator;

 

public class CollectionDemo {

  public static void main(String[] args) {

Collection coll=new ArrayList();

 

show(coll);

}

 

private static void show(Collection coll) {

 

//1 添加元素

coll.add("abc1");

coll.add("abc12");

coll.add("abc12");

coll.add("abc13");

 

//2 删除元素

//coll.remove("abc12");

 

 

//3 清空集合

 

//coll.clear();

 

//coll.contains("abc4");

 

//迭代器方法

Iterator<String> it=coll.iterator();

while(it.hasNext())

System.out.println(it.next());

System.out.println(coll);

 

 

 

}

}

 

 

 

 

4 ListSet的特点

Collection下有两个子体系

一个是List 一个是Set

 

 

List 有序的Collection

 

List :有序(存入和取出的顺序一致),元素都有索引,元素可以重复。

 

Set: 元素不能重复,无序。

 

 

List有如下方法(特点是可以操作角标)

添加

 

删除

 

修改

 

获取

 

具体方法查阅API

 

List有两种取元素的方法

一个是迭代器

 

另外一个是for(int x=0;x<list.size();x++)

{

System.out.println(“get”+list.get(x);

 

 

 

}

 

注意:在List迭代过程中不要使用集合操作,不然会抛出ConcurrentModificationException

 

如果要在迭代过程中添加元素,可以使用ListIterator迭代器(它有添加元素的方法),这个迭代器也叫做列表迭代器。(该迭代器有增删改查的功能,只有List集合具备这个迭代器)

 

 

 

 

 

List子类

  ---Vector:内部是数组数据结构,是同步的,增删查询都很慢

  ---ArrayList:内部是数组数据结构,是不同步的,替代了Vector,查找速度快

  ---LinkedList:内部是链表结构,是不同步的,增删速度快

 

因为这些子类有自己的数据结构,所以有自己一些比较特殊的方法,具体使用请查阅API(数据结构->方法)

 

 

Set集合

 

特点:元素不可以重复,是无序的。(但是按一定方法,保证元素一定的规则)

 

Set接口的方法与collection一样。

 

子类:

HashSet

底层结构是哈希表

 

元素的唯一性是通过对象的hashcodeequals方法来完成对象唯一性的

如果对象的hashcode值不同,那么不用判断equals方法,就直接存储到哈希表中。

如果对象的hashCode值相同,那么要调用对象的equals方法判断是否相等

如果为true 视为相等  不存,如果为false,则进行存储

 

记住:如果元素要存储到HashSet中,必须覆盖hashCode方法和equals方法

 

LinkedHashSet

在哈希表的基础上设置了指针,保证存取一样

 

 

 

 

TreeSet:可以对Set集合中的元素进行排序,是不同步的

判断元素唯一性的方式,就是根据比较方法的返回结果是否是0,是0,就是相同元素,不存。

 

TreeSet对元素进行排序的方式一:

让元素自身具备比较功能,就需要实现Comparable接口,覆盖compareTo方法

 

如果不按照对象中具备的自然顺序进行排序。如果对象中不具备自然顺序,该怎么办?

可以使用TreeSet集合第二种方式

 

让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法

将该类的对象作为参数传递给TreeSet集合的构造函数

 

 

 

 

 

 

 

5MAP集合

存储的是键值对(SET,LIST

 

特点:存储的键是唯一的

 

有如下方法

 

添加

 

删除

 

获取

 

判断

 

重点方法:如何遍历键值对呢?

方式1

 

 通过keyset方法获取键对应的SET集合,通过set集合的迭代器遍历键,再拿到对应的值。

 

方式2(比较不好理解)

 

 通过entryset方法获取map集合对应的键值映射关系对应的set集合,这个集合存储的类型是Map.Entry类型,再通过Map.Entry类方法获取键值。

 

 

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Set;

 

 

 

public class Demo2 {

  public static void main(String[] args) {

 Map<String, Integer> map=new HashMap();

 

 map.put("小陈", 20);

 map.put("小张", 40);

 map.put("小李", 10);

 map.put("小王", 30);

 map.put("小武", 50);

 

 

 Set<Map.Entry<String,Integer>>  entrySet=map.entrySet();

 

 Iterator <Map.Entry<String,Integer>> it=entrySet.iterator();

 

 while(it.hasNext())

 {

 Map.Entry<String, Integer> me=it.next();

 String key=me.getKey();

 Integer value=http://www.mamicode.com/me.getValue();

 System.out.println(key+":"+value);

 }

}

}

 

 

 

 

 

map接口常用子类

 

HashTable

    常用子类:Properties.

HashMap

 

LinkesHashMap

 

TreeMap  

 

它们的特点对应于它们的set结合的特点

并且根据Set的特点覆盖equals hashcode 和排序方法。

 

 

 

4  集合框架工具类

Collections是集合框架的工具类 里面的方法都是静态的。

 

具体使用查阅API

集合框架