------Java培训、Android培训、iOS培训、Net培训、期待与您交流! -------
一、集合的概述
三、Collection接口
Collection接口是集合框架最基础的接口,所以这个接口定义了整个集合框架都可以调用的方法,因此必须十分的熟悉此定义。
以下列举了Collection常用的方法:
四、List列表
List列表作为集合的一种,主要特点在于其中的元素保持一定的顺序,常用List的两种实现类是ArrayList类和LinkedList类。
(1)ArrayList类
在Java中,标准数组是定长的,创建后,就不能被加长或缩短,也就意味着开发者必须先知道数组可以容纳多少元素,一般情况下,只有在运行时才能知道需要多大的数组,为了解决这个问题,集合框架定义了ArrayList,它能够动态地增加或者减少其大小。
ArrayList有三种构造方法:
ArrayList( );----------------------------建立一个空的数组列表
ArrayList(Collection c );------------建立一个数组列表,该列表由类C中的元素初始化;
ArrayList(int initialCapacity);------建立一个数组列表,该数组有指定的初始容量(capacity);
ArrayList类主要的方法及功能描述如下表:
示例:创建一个数组列表,接着添加String类型对象,使列表显示出来,将其中一些元素删除后,再一次显示列表;
import java.util.ArrayList;
public class MyArrayList {
public static void main(String[] args) {
//创建一个ArrayList对象
ArrayList ar = new ArrayList();
System.out.println("数组的大小:"+ar.size());
//向ArrayList对象中添加内容
ar.add("A");
ar.add("B");
ar.add("C");
ar.add("D");
//把“E”加在ArrayList对象的第一个位置
ar.add(0,"E");
System.out.println("加入元素后数组的大小:"+ar.size());
System.out.println("数组的内容:"+ar);
//删除数组中的对象
ar.remove("B");
ar.remove(0);
//打印删除后数组的内容
System.out.println("删除后元素后数组的大小:"+ar.size());
System.out.println("数组的内容:"+ar);
}
}
控制台输出的内容:
数组的大小:0
加入元素后数组的大小:5
数组的内容:[E, A, B, C, D]
删除后元素后数组的大小:3
数组的内容:[A, C, D]
(2)LinkedList类
LinkedList类提供了一个链接列表的数据结构,它有两种构造方法;
LinkedList( );--------------------------------建立一个空的链接列表;
LinkedList( Collection c);-----------------建立一个链接列表,该列表由类C中的元素初始化;
示例:创建一个数组列表,接着添加String类型对象,使列表显示出来,将其中一些元素删除后,再一次显示列表。
import java.util.LinkedList;
public class MyLinkedList {
public static void main(String[] args) {
//创建一个ArrayList对象
LinkedList ar = new LinkedList();
System.out.println("数组的大小:"+ar.size());
//向LinkedList对象中添加内容
ar.add("A");
ar.add("B");
ar.add("C");
ar.add("D");
//在列表的第一个和最后一个位置加入数据
ar.addFirst("E");
ar.addLast("F");
System.out.println("加入元素后数组的大小:"+ar.size());
System.out.println("数组的内容:"+ar);
//删除数组中的对象
ar.removeFirst();
ar.removeLast();
//打印删除后数组的内容
System.out.println("删除后元素后数组的大小:"+ar.size());
System.out.println("数组的内容:"+ar);
}
}
控制台输出的内容:
数组的大小:0
加入元素后数组的大小:6
数组的内容:[E, A, B, C, D, F]
删除后元素后数组的大小:4
数组的内容:[A, B, C, D]
五、Set类
Set集合是一种不包括重复元素的Collection,即Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。Set类中的两个主要的类HashSet类和TreeSet类。
(1)HashSet类
HashSet类创建了一个类集,该类集使用散列表进行存储,而散列表则通过使用称之为散列法的机制来存储信息。在散列中,一个关键字的信息内容被用来确定唯一的一个值,称为散列码。而散列码则被用来当做与关键字相连的数据的存储下标。另外,可以向HashSet中添加null值,但只能添加一次,而且重复向HashSet中添加元素其值只显示一次。
HashSet类的构造方法如下:
HashSet( );------------------------------------------------------构造一个默认的散列集合
HashSet(Collection c);---------------------------------------用类C中的元素初始化散列集合
HashSet(int initislCapacity);--------------------------------用capacity初始化散列集合的容量
HashSet(int initialCapacity , float fillRatio);-------------用参数初始化散列集合的容量和填充比(也称为加载容量)
HashSet类常用的方法及功能描述如下表:
示例:
import java.util.HashSet;
public class TestHashSet {
public static void main(String[] args) {
//创建一个HashSet对象
HashSet hs = new HashSet();
//向HashSet对象中添加内容
hs.add("a");
hs.add("a");
hs.add("b");
hs.add("c");
hs.add("b");
hs.add("a");
//向HashSet对象中添加null
hs.add(null);
System.out.println("HashSet中的元素"+hs);
}
}
控制台输出的内容:
HashSet中的元素[null, a, b, c]
(2)TreeSet类
TreeSet为使用树来进行存储的Set接口提供了一个工具。对象按升序进行存储,这方便我们对其进行访问和检索。在存储了大量的需要进行快速检索的排序信息的情况下,TreeSet是一个很好的选择。
TreeSet类的构造方法如下:
TreeSet( );-------------------------------------构造一个空的树集合,其元素按升序排序
TreeSet(Collection c);----------------------用类C中的元素初始化树集合
TreeSet(Comparator comp);-------------按照由comp指定的比较方法进行排序
TreeSet(SortedSet ss);-------------------构造了一个包含了ss的元素的树集合
TreeSet类中有几个特殊的方及功能描述:
示例:
HashSet中的元素[null, a, b, c]HashSet中的元素[null, a, b, c]HashSet中的元素[null, a, b, c]HashSet中的元素[null, a, b, c]HashSet中的元素[null, a, b, c]HashSet中的元素[null, a, b, c]HashSet中的元素[null, a, b, c]
import java.util.TreeSet;
public class MyTreeSet {
public static void main(String[] args) {
//创建一个TreeSet对象
TreeSet Tr = new TreeSet();
//向TreeSet对象中添加内容
Tr.add(1);
Tr.add(6);
Tr.add(4);
Tr.add(0);
Tr.add(2);
System.out.println("TreeSet类输出内容"+Tr);
}
}
控制台输出的内容:
TreeSet类输出内容[0, 1, 2, 4, 6]
注明:TreeSet类会按树顺序存储其元素,所以它们被按照数字大小排列;而HashSet则 不会。
六、通过迭代方法访问类集——Iterator接口
Iterator()是一个或者实现Iterator,或者实现ListIterator接口的对象。Iterator可以完成通过循环输出类集内容,从而获得或删除元素。ListIterator是对Iterator的扩展,允许双向遍历列表,并且可以修改单元。
Iterator接口说明方法的总结:
在通过迭代方法访问类集之前,必须得到一个迭代方法。通常,使用迭代方法循环输出类集内容的操作步骤如图:
示例:
import java.util.ArrayList;
import java.util.Iterator;
public class MyListIterator {
public static void main(String[] args) {
//创建一个ArrayList对象
ArrayList ar = new ArrayList();
//向ArrayList对象中添加内容
ar.add("A");
ar.add("B");
ar.add("C");
ar.add("D");
System.out.print("数组的内容是:");
//使用Iterator显示数组的内容
Iterator itr = ar.iterator();
//调用hasNext()方法进行循环
while (itr.hasNext()) {
Object c = itr.next();
System.out.print(c+"");
}
}
}
控制台显示的内容:
数组的内容是:ABCD
七、映射
映射(map)是一个存储关键字和值的关联,或者说是“关键字/值”对的对象,即给定一个关键字,可以得到它的值。关键字和值都是对象,关键字必须是唯一的,但值是可以被复制的。而Map接口映射唯一关键字到值。关键字是以后用于检索值的对象。给定一个关键字和一个值,可以存储这个值到一个Map对象中。当这个值被存储以后,就可以使用它的关键字来检索它。
Java提供了几个用来实现映射接口的类。可以被用作映射的类如下表:
(1)HashMap类
HashMap类使用散列表实现Map接口,其构造方法如下:
HashMap();-----------------------------------------------构造一个默认的散列映射;
HashMap(Map m);--------------------------------------用类m中的元素初始化散列映射
HashMap(int Capacity);-------------------------------将散列集合的容量初始化为capacity
HashMap(int Capacity , float fillRatio);------------用参数同时初始化散列映射的容量和填充比
HashMap类的主要方法及功能如下表:
示例:
import java.util.HashMap;
public class MyHashMap {
public static void main(String[] args) {
//创建一个HashMap对象
HashMap hm = new HashMap();
//向HashMap对象中添加内容
hm.put(1,"a");
hm.put(2,"b");
hm.put(3,"c");
hm.put(4,"d");
System.out.println("添加元素后的结果为:");
System.out.println(hm);
//删除和替换元素
hm.remove(3);
hm.put(2, "e");
System.out.println("删除和替换元素后的结果为:");
System.out.println(hm);
}
}
控制台显示的内容:
添加元素后的结果为:
{1=a, 2=b, 3=c, 4=d}
删除和替换元素后的结果为:
{1=a, 2=e, 4=d}
注意:HashMap类不保证输出元素的顺序
(2)TreeMap类
TreeMap类通过使用树实现Map接口。TreeMap提供了按排序顺序存储关键字/值对的有效手段,同时允许快速检索。不像散列映射,树映射保证它的元素按照关键字升序排序。
TreeMap的构造方法如下:
TreeMap();---------------------------------------构造一个空树的映射
TreeMap(Map m);------------------------------用类m中的元素初始化映射,使用关键字按自然排序
Treemap(Comparator comp);---------------构造一个空的基于树的映射通过的使用Comparator来排序
TreeMap(SortedMap sm);--------------------用从sm的输入来初始化一个树映射
TreeMap类常用方法及功能如下:
示例:
import java.util.Iterator;
import java.util.TreeMap;
public class MyTreeMap {
public static void main(String[] args) {
//创建一个TreeMap对象
TreeMap tm = new TreeMap();
//向TreeMap对象中添加内容
tm.put(1,"a");
tm.put(7,"b");
tm.put(5,"c");
tm.put(3,"d");
System.out.println("所有的元素的值为:"+tm);
//为tm对象中的键值添加一个迭代器
Iterator iter = tm.keySet().iterator();
for (; iter.hasNext();) {
System.out.println("元素的值:"+tm.get(iter.next()));
}
}
}
控制台输出的内容:
所有的元素的值为:{1=a, 3=d, 5=c, 7=b}
元素的值:a
元素的值:d
元素的值:c
元素的值:b