List接口:List中的对象是有序、可重复的,List是Collection接口的子接口,可以使用Collection接口中的全部方法。
ArrayList和Vector是List接口的两个典型实现类,完全支持List接口的所有功能方法
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<String> list= new ArrayList<String>();
list.add("北京");
list.add("上海");
list.add("青岛");
System.out.println("-----------------------");
for(String a:list)
{
System.out.println(a);
}
System.out.println("-----------------------");
for(int i=0;i<list.size();i++)
{
String a=list.get(i);
System.out.println(a);
}
System.out.println("-----------------------");
list.remove(0);
Iterator<String> it=list.iterator();
while(it.hasNext())
{
String a=it.next();
System.out.println(a);
}
System.out.println("-----------------------");
list.remove("上海");
for(String a:list)
{
System.out.println(a);
}
}
}
add()方法是往ArrayList集合里面添加元素。
remove()方法是移除ArrayList集合里指定下标的元素。remove()方法还可以通过元素值来移除元素。
-----------------------
北京
上海
青岛
-----------------------
北京
上海
青岛
-----------------------
上海
青岛
-----------------------
青岛
以上为运行结果。
Vector的子类Stack具有栈的特性,也就是先进后出。具体看代码
import java.util.Stack;
public class StackDemo {
public static void main(String[] arg)
{
Stack<Integer> s=new Stack<Integer>();
for(int i=0;i<5;i++)
{
s.add(i);
}
System.out.println(s);
while(!s.isEmpty())
{
int a= s.pop();
System.out.println(a);
}
}
}
Stack类中的添加元素方法与ArrayList相同。
Stack类中有一个pop()方法可以弹出并遍历元素,也就是将最后进入的元素弹出来。与栈弹出元素相同。
运行结果:
[0, 1, 2, 3, 4]
4
3
2
1
0
Set集合类似一个罐子,可以将多个元素丢进罐子里,但不能记住元素的添加顺序,因此不允许包含相同的元素。也就是说Set集合中的元素是无序的、不可重复的。其用法与Collection相同
Set接口常用的实现类包括HashSet、TreeSet和EnumSet
HashSet是Set接口的典型实现类,大多数使用Set集合时都使用该实现类。HashSet使用Hash算法来存储集合中的元素,具有良好的存、取以及查找性。
TresSet采用Tree“树”的数据结构来存储集合元素,因此可以保证集合中的元素处于排序状态。TreeSet支持两种排序方式:自然排序和定制排序,默认情况下使用自然排序。
以下为HashSet的代码:
import java.util.HashSet;
import java.util.Iterator;
public class HashSetDemo {
public static void main(String[] arg)
{
HashSet<String> h=new HashSet<String>();
h.add("第1");
h.add("第1");
h.add("第2");
h.add("第3");
h.add("第4");
for(String s:h)
{
System.out.println(s);
}
System.out.println("------------------------");
h.remove("第1");
Iterator<String> it=h.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
运行结果:
第4
第2
第3
第1
------------------------
第4
第2
第3
打印出来HashSet中的元素是无序的。
TreeSet代码如下:
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet<String> t=new TreeSet<String>();
t.add("第a");
t.add("第a");
t.add("第d");
t.add("第c");
t.add("第b");
for(String a:t)
{
System.out.println(a);
}
}
}
运行结果:
第a
第b
第c
第d
由此可见TreeSet会将添加的元素进行自然排序。
队列Queue通常以“先进先出”的方式排列各个元素,即最先入队的元素最先出队,Queue接口继承Collection接口,除了Collection接口中的基本操作外,还提供了队列的插入、提取和检查操作,且每个操作都存在两种形式:一种操作失败是抛出异常;另一种操作失败时返回一个特殊值(null或false)。
链接列表LinkedList是Deque和List两个接口的实现类,兼具队列和列表两种特性,是最常使用的集合类之一。LinkdeList不是基于线程安全的,如果多个线程同时访问个LinkedList实例,而其中至少与一个线程从结构上修改该列表时,则必须有外部代码手动保持同步。
import java.util.LinkedList;
public class LinkListDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedList<Integer> list=new LinkedList<Integer>();
for(int i=0;i<5;i++){
list.add(i);
}
System.out.println(list);
list.offer(5);
System.out.println(list);
list.offerFirst(-1);
System.out.println(list);
/* for(int i=0;i<list.size();i++)
{
System.out.println(list.get(i));
}*/
System.out.println(list.peekFirst());
System.out.println(list);
System.out.println(list.pollFirst());
System.out.println(list);
System.out.println(list.pop());
System.out.println(list);
}
}
运行结果如下:
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4, 5]
[-1, 0, 1, 2, 3, 4, 5]
-1
[-1, 0, 1, 2, 3, 4, 5]
-1
[0, 1, 2, 3, 4, 5]
0
[1, 2, 3, 4, 5]
LingedList中offer()方法是在最后添加一个元素,offerFirst()方法是在队列最前面添加一个元素,peekFirst()方法是输出队列里第一个元素,pollFirst()方法是将第一个元素拿出来输出,pop()方法与栈中pop()方法相同。
Map接口
Map接口是集合框架的另一个根接口,与Collection接口并列。Map接口是以key/value键值对映射关系存储的集合
HashMap和TreeMap是Map体系中两个常用实现类,其特点如下:
HashMap是基于哈希算法的Map接口的实现类,该实现类提供所有映射操作,并允许使用null键和null值,但不能保证映射的顺序,即是无序的映射集合;
TreeMap是基于“树”结构来存储的Map接口实现类,可以根据其键的自然顺序进行排序,或定制排序方式。
HashMap代码如下:
import java.util.HashMap;
public class HashMapDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
HashMap<String,String> hm=new HashMap<String,String>();
hm.put("a", "zhangsan");
hm.put("b", "lisi");
hm.put("c", "wanggou");
hm.put(null, null);
hm.remove("a");
System.out.println(hm.get("a"));
System.out.println(hm.get("b"));
System.out.println(hm.get("c"));
System.out.println(hm.get(null));
}
}
运行结果:
null
lisi
wanggou
null
由此可见HashMap里是可以存放null的。
TreeMap代码如下:
import java.util.TreeMap;
public class TreeMapDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeMap<String,String> tm=new TreeMap<String,String>();
tm.put("1","zahngsan");
tm.put("2","lisi");
tm.put("3", "wangwu");
String a=tm.get("1");
System.out.println(a);
}
}
运行结果:
zahngsan
如果TreeMap里面放入空值就会报错
Exception in thread "main" java.lang.NullPointerException
at java.util.TreeMap.put(Unknown Source)
at com.qst.dms.net.TreeMapDemo.main(TreeMapDemo.java:12)
错误如上。