Java进阶篇(三)——Java集合类

  集合能够看做一个容器,集合中的对象能够很容易存放到集合中,也很容易将其从集合中取出来,还能够按必定的顺序摆放。Java中提供了不一样的集合类,这些类具备不一样的存储对象的方式,并提供了相应的方法方便用户对集合进行遍历。html

  集合的长度是可变的,用来存放对象的引用。常见的集合类有List集合、Set集合、Map集合。java

一.集合类接口

  如下接口的经常使用方法有不少,这里只提其中重要的几个方法,其它方法在使用时可参照API。数组

  1. List接口

  List是列表类型,以线性方式存储对象,自身的方法都与索引有关,个别经常使用方法以下。spa

方法 返回值 功能描述
add(int index, Object obj) void 用来向集合中的指定索引位置添加对象,集合的索引位置从0开始,其余对象的索引位置相对向后移一位
set(int index, E element) Object 用指定元素替换列表中指定位置的元素,返回之前在指定位置的元素
indexOf(Object obj) int 返回列表中对象第一次出现的索引位置,若是集合中不包含该元素则返回-1
lastIndexOf(Object obj) int 返回列表中对象最后一次出现的索引位置,若是集合汇总不包含该元素则返回-1
listIterator() ListIterator 用来得到一个包含全部对象的ListIterator迭代器

  下面举一个实例,看看如何建立并添加修改集合元素。3d

 1 import java.util.Iterator;
 2 import java.util.LinkedList;
 3 import java.util.List;
 4 
 5 public class CollectionDemoList {
 6 
 7     public static void main(String[] args) {
 8         String aString = "A", bString = "B", cString = "C", dString = "D", eString  = "E";
 9         
10         List<String> list = new LinkedList<>();        // 建立list集合对象
11         list.add(aString);        // 向集合中添加元素
12         list.add(bString);
13         list.add(eString);
14         // 输出语句,用迭代器
15         Iterator<String> iter = list.iterator();        // 建立集合迭代器
16         while(iter.hasNext()) {        // 遍历集合中的元素
17             System.out.print(iter.next() + " ");
18         }
19         
20         System.out.println();        // 换行
21         list.set(1, cString);        // 将索引位置1的对象修改成对象bString
22         Iterator<String> it = list.iterator();
23         while(it.hasNext()) {
24             System.out.print(it.next() + " ");
25         }
26     }
27 
28 }

  上述代码中,add()方法用于向集合中添加元素,set()方法用于修改集合中的元素,迭代器用于遍历集合中的元素并输出(会在下面的内容中涉及)。运行结果以下:code

  

  其中建立List集合对象时,“<>”中是集合汇总元素的类型,如上方的String表示集合中的元素由String字符串构成。由于List是一个接口,因此new的是接口的实现类,在Eclipse中光标放在List上按Ctrl+T就能够看见List接口的全部实现类了。htm

  2. Set接口

  Set接口经常使用方法以下。对象

方法 返回值 功能描述
add(Object obj) boolean 若集合中尚存在未指定的元素,则添加此元素
addAll(Collection col) boolean 将参数集合中全部元素添加到集合的尾部
remove(Object obj) boolean 将指定的参数对象移除
clear() void 移除此Set中的全部元素
iterator() Iterator 返回此Set中的元素上进行迭代的迭代器
size() int 返回此Set集合中的全部元素数
isEmpty() boolean 若是Set不包含元素,则返回true

  下面看一个例子,用addAll()方法把List集合对象存入到Set集合中并除掉重复值。blog

 1 import java.util.ArrayList;
 2 import java.util.HashSet;
 3 import java.util.Iterator;
 4 import java.util.List;
 5 import java.util.Set;
 6 
 7 public class CollectionDemoSet {
 8 
 9     public static void main(String[] args) {
10         List<String> list = new ArrayList<>();        // 建立List集合对象
11         list.add("dog");
12         list.add("cat");
13         list.add("fish");
14         list.add("cat");    //重复值
15         
16         Set<String> set = new HashSet<>();        // 建立List对象集合
17         set.addAll(list);        // 将List集合对象添加到Set集合中
18         Iterator<String> it = set.iterator();
19         while(it.hasNext()) {
20             System.out.print(it.next() + " ");
21         }
22     }
23 
24 }

   同理,建立Set对象集合时,Set是一个接口,new的是接口的实现类。运行结果以下:索引

  

  因为Set集合中的对象是无序的,遍历Set集合的结果与插入Set集合的顺序并不相同。

  3. Map接口

  Map接口提供了将键映射到值的对象,一个映射不能包含重复的键,每一个键最多只能映射一个值。Map接口一样提供了clear()、isEmpty()、size()等方法,还有一些经常使用方法以下。

方法 返回值 功能描述
put(key k, value v) Object 向集合中添加指定的key与value的映射关系
get(Object key) boolean 若是存在指定的键对象,则返回该对象对应的值,不然返回null
values() Collection 返回该集合中全部值对象造成的Collection集合

  下面看一个例子。

 1 import java.util.HashMap;
 2 import java.util.Map;
 3 
 4 public class MapDemo {
 5 
 6     public static void main(String[] args) {
 7         Map<String, String> map = new HashMap<>();        // 建立Map集合
 8         map.put("1", "dog");
 9         map.put("2", "cat");
10         map.put("3", "fish");
11         for(int i=1; i<=3; i++) {
12             System.out.println("第" + i + "个元素是:" + map.get("" + i + ""));
13         }
14     }
15 
16 }

   具体写法参照上例便可。运行结果以下:

  

  建立Map集合时,Map接口的“<>”中含有两个类型,分别对应其key与value。

2、集合类接口的实现类

  上面在定义一个接口时,都有new一个实现类,下面介绍几种经常使用的实现类。

  1. List接口的实现类

  List接口的实现类经常使用的有ArrayList和LinkedList,这两个实现类在上面的例子中已经出现过了。

  ArrayList类实现了可变的数组,能够根据索引位置对集合进行快速的随机访问。LinkedList类采用链表结构保存对象,便于向集合中插入和删除对象。对于线性结构和链式结构不清楚的朋友能够看我以前的博客“数据的存储结构”,连接:http://www.cnblogs.com/adamjwh/p/5829604.html,也能够自行查阅资料。

  分别经过ArrayList和LinkedList类实例化List集合以下:

List list1 = new ArrayList();
List list2 = new LinkedList();

  2. Set接口的实现类

  Set接口的实现类经常使用的有HashSet和TreeSet,实现以下:

Set<String> set1 = new HashSet<String>();
Set<String> set2 = new TreeSet<String>();

  3. Map接口的实现类

  Map接口的实现类经常使用的有HashMap和TreeMap,建议使用HashMap(效率相对较高)。

  实现以下:

Map map = new HashMap();
Map map = new TreeMap();

 3、迭代器

  迭代器是利用Iterator接口建立的,在上面已经出现过了。以下是上方Set接口中的代码:

Iterator<String> it = set.iterator();    // 建立一个迭代器
while(it.hasNext()) {
    System.out.print(it.next() + " ");
}    

  上述代码用Iterator接口和iterator()方法建立了一个迭代器;用while循环遍历这个集合,hasNext()方法是循环判断条件,即若是有元素能够迭代,返回true,循环继续执行;next()方法是返回迭代的下一个元素。除了这两个方法外,Iterator接口还有一个方法是remove(),用于从迭代器指向的collection中移除迭代器返回的最后一个元素。

相关文章
相关标签/搜索