集合类的四个接口

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)

错误如上。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值